Показать сообщение отдельно
Старый 17.03.2011, 22:05   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Задачка на математику и логику.

FireOwl, я тоже обожаю задачки такого рода.
По поводу версии 2:
Первое заполнение массива было правильным в плане итераций, лишь поменяны местами индексы. Не "m[c%5,c/5]", а "m[c/5,c%5]". Тогда будет перелистывать все y для каждого x.
В новом примере, первый цикл теперь выходит за пределы массива, т.к. цикл до 100, а по формуле "c/mw" будут варианты больше 5, что вылезет как runtime ошибка.
Если поставить ограничение в первом цикле на 25, то программа продолжится.
Вторая часть программы с вложенным циклом верна, за исключением коррекции в первом (поменять вычисления для индексов местами, для y будет с модулем.

Результат правильный, с коррекциями.

Теперь относительно вложенного цикла (for (int a=0;a<mw*mh;a++) {). Посчитай количество итераций, с учётом первого цикла. В данном случае вложенный цикл почти не отличается от первого цикла, где ты заполняешь сам массив, это смекалка для данной задачи - ты бы мог вывезти результат при заполнении массива, плюс за смекалку, минус за то что меньше математики и дополнительного цикла, в данном бы случае, стоило бы узнать у тестируемого, как бы он разделил приложение, сделал бы второй цикл, для проверки математики.

В первом цикле ты устанавливаешь результат, но ты ведь его уже приписал в массиве, он уже есть в массиве, и его не нужно получать. Закономерность запрашиваемых циклов в том что они чередуются 20, думаю это ещё одна подсказка, что поможет упростить.
Второй цикл, можно разобрать для читаемости на два, как цикл по x и по y, но и этот вариант хорош, лишь менее читабелен и немного менее адаптируемый для модификаций.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FireOwl (18.03.2011)