|
|||
for i := 1 to N do. if (a[i] mod 16 = 15) and (a[i] > k) then. writeln(k);. for i := 1 to N do. if (a[i] mod 8 = 7) and (a[i] < k) then. if k = 10001 then. writeln(0). writeln(k);. for i := 1 to N do. if (a[i] mod 8 = 7) and. ((a[i] < k) or (k =
Ответы к задания из ЕГЭ (№ 25-2) 1) Если шестнадцатеричная запись числа заканчивается на F, это означает, что остаток от деления этого числа на 16 равен 15. Перед циклом перебора элементов массива нужно записать в переменную k, которая будет хранить максимальное подходящее значение, число 0. Если ни одного подходящего числа мы не найдем, в этой переменной останется 0 и он будет выведен в качестве результата. Заметьте, что по условию все числа положительные и нуля среди них быть не может. k: = 0; for i: = 1 to N do if (a[i] mod 16 = 15) and (a[i] > k) then k: = a[i]; writeln(k); 2) Эта задача полностью аналогична предыдущей, за исключением выбора начального значения для переменной k. Можно, например, использовать тот факт, что все значения элементов массива не превышают 10000. Сначала записываем в переменную k значение 10001 (или любое значение, большее 10000). Если это значение не изменится после работы цикла (не нашли ни одного подходящего числа), выводим 0. k: = 10001; for i: = 1 to N do if (a[i] mod 8 = 7) and (a[i] < k) then k: = a[i]; if k = 10001 then writeln(0) else writeln(k); Возможен другой вариант – сначала присвоить переменной k значение 0 и усложнить условие: будем изменять k, если значение подходящего элемента массива меньше k или k = 0. В этом случае не требуется ветвление при выводе результата, так как в переменной k останется 0, если ни одного подходящего значения не нашли. k: = 0; for i: = 1 to N do if (a[i] mod 8 = 7) and ((a[i] < k) or (k = 0)) then k: = a[i]; writeln(k); 3) Если восьмеричная запись числа содержит три цифры, то число находится в диапазоне [82; 83-1], то есть [64; 511]. В остальном решение аналогично решению задачи 51: k: = 0; for i: = 1 to N do if (64 < = a[i]) and (a[i] < 512) and (a[i] > k) then
|
|||
|