Процедура f(n), где n – натуральное число, задана следующим образом: си void f(int n) { printf (“%dn”, n); if (n< 6) { f (n+2) ; f (n*3) ; } } найдите сумму чисел, которые будут выведены при вызове f(1)
uses crt; var k:integer; n:integer; begin clrscr; k:=0; writeln('Тест по теме "Циклы"'); writeln('Вопрос 1. Алгоритм называют циклическим, >'); writeln('если в нем:'); writeln('1)Реализуется многократно повторяющаяся'); writeln(' последовательность действий'); writeln('2)Используются повторяющиеся праметры'); writeln('3)Много раз используются одни и те же операторы'); writeln('4)Используются команда выбора');write('Введите номер правильного ответа:'); read(n); if n=1 then k:=k+1; writeln('Вопрос 2. Сколько раз будет выполнятся цикл,<'); writeln('если начальное значение параметра -6'); writeln('конечное значение 6,'); writeln('шаг изменения параметра равен 3'); writeln('1)6 раз'); writeln('2)5 раз'); writeln('3)4 раз'); writeln('4) Не выполнится ни разу'); write('Введите номер правильного ответа:'); read(n); if n=2 then k:=k+1; case k of 1,2:writeln('Плохо'); 3: writeln('Удовлетворительно'); 4: writeln('Хорошо'); 5: writeln('Отлично'); end; readkey; end.
Const N=2016; var a: array [1..N] of integer; i, m, k: integer; begin for i:=1 to N do readln(a[i]); k:=0; for i:=1 to N do begin m:=a[i]-516; if m>=0 then begin if m mod 8=0 then begin m:=m div 8; if (m - m mod 8) mod 8 = 0 then if a[i]>k then k:=a[i] end end end; Writeln(k) end.
Объяснения Число 1000₁₀ = 1750₈, а минимальное четырехзначное восьмеричное число - это 1000₈ = 512₁₀. Следовательно, искомые числа лежат на интервале [512;1000] и всегда содержат 1 в старшем разряде своего восьмеричного представления. Вычтем из исходного числа 512 и тогда можно рассматривать только трехзначные восьмеричные числа. Трехзначное восьмеричное число в расширенной записи имеет вид N=abc₈ = (a×8²+b×8¹+c)₁₀ = 64a+8b+c. По условию с=4, поскольку число должно оканчиваться на 4 в своем восьмеричном представлении. Мы получили соотношение N-4 = 64a+8b = 8(8a+b), т.е. N-4 должно быть кратно 8. Итак, первый шаг - получить a[i]-516 и если оно не отрицательно, проверить нулевой остаток от деления этой величины на 8. Если это так, полагаем m=(a[i]-4) div 8. Рассматриваем уравнение m=8a+b. a=(m-b)/8. Понятно, что m-b>0 и a должно быть кратно 8. Что и следует проверить. Если все так и есть - число подходит и следует обычная проверка алгоритма поиска максимума.
uses crt;
var k:integer;
n:integer;
begin
clrscr;
k:=0;
writeln('Тест по теме "Циклы"');
writeln('Вопрос 1. Алгоритм называют циклическим, >');
writeln('если в нем:');
writeln('1)Реализуется многократно повторяющаяся');
writeln(' последовательность действий');
writeln('2)Используются повторяющиеся праметры');
writeln('3)Много раз используются одни и те же операторы');
writeln('4)Используются команда выбора');write('Введите номер правильного ответа:');
read(n);
if n=1 then k:=k+1;
writeln('Вопрос 2. Сколько раз будет выполнятся цикл,<');
writeln('если начальное значение параметра -6');
writeln('конечное значение 6,');
writeln('шаг изменения параметра равен 3');
writeln('1)6 раз');
writeln('2)5 раз');
writeln('3)4 раз');
writeln('4) Не выполнится ни разу');
write('Введите номер правильного ответа:');
read(n);
if n=2 then k:=k+1;
case k of
1,2:writeln('Плохо');
3: writeln('Удовлетворительно');
4: writeln('Хорошо');
5: writeln('Отлично');
end;
readkey;
end.
N=2016;
var
a: array [1..N] of integer;
i, m, k: integer;
begin
for i:=1 to N do
readln(a[i]);
k:=0;
for i:=1 to N do begin
m:=a[i]-516;
if m>=0 then begin
if m mod 8=0 then begin
m:=m div 8;
if (m - m mod 8) mod 8 = 0 then
if a[i]>k then k:=a[i]
end
end
end;
Writeln(k)
end.
Объяснения
Число 1000₁₀ = 1750₈, а минимальное четырехзначное восьмеричное число - это 1000₈ = 512₁₀.
Следовательно, искомые числа лежат на интервале [512;1000] и всегда содержат 1 в старшем разряде своего восьмеричного представления.
Вычтем из исходного числа 512 и тогда можно рассматривать только трехзначные восьмеричные числа.
Трехзначное восьмеричное число в расширенной записи имеет вид
N=abc₈ = (a×8²+b×8¹+c)₁₀ = 64a+8b+c.
По условию с=4, поскольку число должно оканчиваться на 4 в своем восьмеричном представлении.
Мы получили соотношение N-4 = 64a+8b = 8(8a+b), т.е. N-4 должно быть кратно 8. Итак, первый шаг - получить a[i]-516 и если оно не отрицательно, проверить нулевой остаток от деления этой величины на 8. Если это так, полагаем m=(a[i]-4) div 8.
Рассматриваем уравнение m=8a+b. a=(m-b)/8. Понятно, что m-b>0 и a должно быть кратно 8. Что и следует проверить. Если все так и есть - число подходит и следует обычная проверка алгоритма поиска максимума.