Теперь рассмотрим оператор изменения M: if x mod 2 1 then M: M + (x mod 10) div 2 end Оператор mod оставляет только остаток от деления, при делении на 10 э то последняя ц ифра x.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
i=4: T = 7, N = 11 * 4 + 7 = 51.
Последнее действие и даст нам искомый результат.
Ответ: 51.
Ответ: 51
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 8.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Уже на первом шаге можно получить x mod 10 = 8, если последняя цифра числа
есть 8. Далее
можно сделать так, чтобы M больше не менялось: для этого нарушим условие x mod 2 = 0, т. е.
сделаем первые две цифры исходного числа
нечётными, при этом нам уже не будет важно
условие M < x. Тогда наибольшее значение вводимого числа
= 998.
Ответ: 998.
Ответ: 998




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
#include
void Pr1(int L, int* R)
{
int i, n, t;
for ( i=0; it = (R[i] / 2) *4;
R[i] = t % 5;
}
}
int F1(int L, int* R)
{
int N, i, T;
N = 1;
T = 1;
for ( i=0; iN = N *R[i]+T;)
T = T+2;
}
return N;
}
void main()
{
int L = 4;
int* R = (int*)calloc(L, sizeof(int));
int N;
R[0] = 6; R[1] = 10; R[2] = 7; R[3] = 3;
Pr1(L, R);
N = F1(L, R);
printf("%d\n", N);
free(R);
}
алг Задача
нач
цел L=4; целтаб R[1:L]; цел N
R[1]:=6; R[2]:=10; R[3]:=7; R[4]:=3;
Pr1(L, R)
N:=F1(L, R)
вывод N, нс
кон
алг Pr1(цел L, аргрез целтаб R[1:L])
нач
цел i, n, t
нц для i от 1 до L
t:=div(R[i],2)*4
R[i]:=mod(t, 5)
кц
кон
алг цел F1(цел L, аргрез целтаб R[1:L])
нач
цел N, i, T
N:=1
T:=1
нц для i от 1 до L
N:=N*R[i]+T
T:=T*3
кц
знач:= N
кон
Пояснение.
В конце программы на экран выводится значение переменной N, рассмотрим как оно получается
на примере программы на Паскале.
Поскольку L = 4, то изначально мы имеем одномерный массив из четырёх целочисленных элемнтов
R[i]:
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;. В ходе процедуры Pr1 эти значения изменяются, причём
независимо друг от друга:
for i:=1 to L do
begin
t:=(R[i] div 2)*4;
R[i]:=t mod 5;
Оператор div оставляет целую часть от деления, а оператор mod оставляет остаток от деления
(при делении на 5 он не превышает 4).
R[i]
61073
t = (R[i] div 2) * 43 * 45 * 43 * 41 * 4
R[i] = t mod 5
2024
Функции F1 присваивается значени переменой N, которое внутри тела функции получается
следующим образом:
for i:=1 to L do
begin
N:=N*R[i]+T;
T:=T+2;
end;
Подставим полученные ранее значения R[i]:
i=1: T = 1, N = 1 * 2 + 1 = 3,
i=2: T = 3, N = 3 * 0 + 3 = 3,
i=3: T = 5, N = 3 * 2 + 5 = 11,




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Чтобы получить M = 10, в числе
должна быть цифра 5. Это можно сделать уже на первом шаге.
На втором шаге число
уже двузначное. Если не будет выполняться условие M < x, то M далее не
изменится. Это возможно только при
= 105, поскольку 10 наименьшее из двузначных чисел, при
этом мы получим наименьшее искомое число.
Ответ: 105.
Ответ: 105
B8
Ниже приведены тексты одной и той же программы, записанные на четырех языках
программирования. Что будет напечатано в результате выполнения этой программы?
Бэйсик
Паскаль
Module Task
Sub Main()
Dim L As Integer = 4
Dim R(4) As Integer
Dim N As Integer
R.SetValue(6, 1)
R.SetValue(10, 2)
R.SetValue(7, 3)
R.SetValue(3, 4)
Pr1(L, R)
N = F1(L, R)
Console.Write(N)
Console.WriteLine()
End Sub
Sub Pr1(ByVal L As Integer, ByRef R As Array)
Dim i, n, t As Integer
For i = 1 To L
t = (R.GetValue(i) \ 2) * 4
R.SetValue(t Mod 5, i)
Next
End Sub
Function F1(ByVal L As Integer, ByRef R As Array)
As
Integer
Dim N, i, T
N = 1
T = 1
For i = 1 To L
N = N * R.GetValue(i) + T
T = T + 2
Next
Return N
End Function
End Module
Program Task;
Uses crt;
const L = 4;
type
atype = array [1..L] of integer;
Var R : atype;
N, p : integer;
Procedure Pr1(L : integer; var R : atype );
var i,n,t : integer;
begin
for i:=1 to L do
begin
t:=(R[i] div 2)*4;
R[i]:=t mod 5;
end;
end;
Function F1 (L : integer; R: atype) : integer;
Var N, i, T : integer;
begin
N:=1;
T:=1;
for i:=1 to L do
begin
N:=N*R[i]+T;
T:=T+2;
end;
F1:=N;
end;
BEGIN
R[1]:=6; R[2]:=10; R[3]:=7; R[4]:=3;
Pr1(L, R);
N:=F1(L,R);
write(N);
writeln;
END.
Си
Алгоритмический
#include




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
однозначные число 14 не имеет. Следовательно, минимальное число x = 127.
Ответ: 127.
Ответ: 127
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Напомним:
X div a - целая часть от деления числа X на a,
X mod a - остаток от деления числа X на a.
Пока X больше нуля выполняется увеличение L на единицу. Если X четное (остаток от деления на
2 равен 0), то M увеличивается на половину цифры, стоящей в единицах числа X, X сокращается
на один разряд справа.
L - количество цифр в числе X,
M - сумма, которая находится таким образом:
L=3, следовательно X = a * 100 + b * 10 + c,
M = (a + b + c) / 2, если все числа четны. Если хоть одно из чисел нечетное, то сумма будет
состоять из 2-х цифр, так как при М = 7, a + b + c = 14, т. е. нужны как минимум 2 цифры чтобы
набрать данную сумму.
Чтобы подобрать максимальное число примем, что a = 9, b + c = 14, и обе цифры четные, так что
b = 8 — наибольшая четная цифра, c = 6.
Правильный ответ: 986.
Ответ: 986
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 10.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Уже на первом шаге можно получить x mod 10 = 8, если последняя цифра числа
есть 8. Далее
можно сделать так, чтобы M больше не менялось: для этого нарушим условие x mod 2 = 0, т. е.
сделаем первые две цифры исходного числа x нечётными. Тогда наибольшее значение вводимого
числа x = 998.
Ответ: 998.
Ответ: 998
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число
, этот алгоритм печатает два
числа
и
.
Бейсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A = 0: B = 1
WHILE X > 0
A = A + 1
B = B * (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a: = 0; b: = 1;
while x>0 do
begin
a : = a + 1;
b : = b * (x mod 10);
x : = x div 10
end;
writeln(a);
write(b);
end.
Си
алгоритмический язык
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 1;
while (x>0){
a = a + 1;
b = b * (x%10);
x = x/10;
}
printf("%d\n%d", a, b);
алг
нач
цел
x, a, b
ввод
x
a: = 0; b: = 1
нц
пока
x>0
a : = a + 1
b : = b * mod(x,10)
x : = div(x,10)
кц
вывод
a, нс
, b
кон
Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом
14.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало a = 3, x должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается произведением цифр числа x.
Представим число 14 в виде: 14 = 7 * 2 * 1. Другого представления, в котором все множители




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
(при делении на 5 он не превышает 4).
R[i]
5962
t = (R[i] div 2) * 42 * 44 * 43 * 41 * 4
R[i] = t mod 5
3124
Функции F1 присваивается значени переменой N, которое внутри тела функции получается
следующим образом:
for i:=1 to L do
begin
N:=N*R[i]+T;
T:=T+2;
end;
Подставим полученные ранее значения R[i]:
i=1: T = 1, N = 1 * 3 + 1 = 4,
i=2: T = 3, N = 4 * 1 + 3 = 7,
i=3: T = 5, N = 7 * 2 + 5 = 19,
i=4: T = 7, N = 19 * 4 + 7 = 83.
Последнее действие и даст нам искомый результат.
Ответ: 83.
Ответ: 83
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 8.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть
не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 0 then
M:= M + x mod 10;
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
t = (R.GetValue(i) \ 2) * 4
R.SetValue(t Mod 5, i)
Next
End Sub
Function F1(ByVal L As Integer, ByRef R As Array)
As
Integer
Dim N, i, T
N = 1
T = 1
For i = 1 To L
N = N * R.GetValue(i) + T
T = T + 2
Next
Return N
End Function
End Module
begin
N:=1;
T:=1;
for i:=1 to L do
begin
N:=N*R[i]+T;
T:=T+2;
end;
F1:=N;
end;
BEGIN
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;
Pr1(L, R);
N:=F1(L,R);
write(N);
writeln;
END.
Си
Алгоритмический
#include
#include
void Pr1(int L, int* R)
{
int i, n, t;
for ( i=0; it = (R[i] / 2) *4;
R[i] = t % 5;
}
}
int F1(int L, int* R)
{
int N, i, T;
N = 1;
T = 1;
for ( i=0; iN = N *R[i]+T;
T = T+2;
}
return N;
}
void main()
{
int L = 4;
int* R = (int*)calloc(L, sizeof(int));
int N;
R[1] = 5; R[2] = 9; R[3] = 6; R[4] = 2;
Pr1(L, R);
N = F1(L, R);
printf("%d\n", N);
free(R);
}
алг Задача
нач
цел L=4; целтаб R[1:L]; цел N
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;
Pr1(L, R)
N:=F1(L, R)
вывод N, нс
кон
алг Pr1(цел L, аргрез целтаб R[1:L])
нач
цел i, n, t
нц для i от 1 до L
t:=div(R[i],2)*4
R[i]:=mod(t, 5)
кц
кон
алг цел F1(цел L, аргрез целтаб R[1:L])
нач
цел N, i, T
N:=1
T:=1
нц для i от 1 до L
N:=N*R[i]+T
T:=T*3
кц
знач:= N
кон
Пояснение.
В конце программы на экран выводится значение переменной N, рассмотрим как она олучается
на примере программы на Паскале.
Поскольку L = 4, то изначально мы имеем одномерный массив из четырёх целочисленных элемнтов
R[i]:
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;. В ходе процедуры Pr1 эти значения изменяются, причём
независимо друг от друга:
for i:=1 to L do
begin
t:=(R[i] div 2)*4;
R[i]:=t mod 5;
Оператор div оставляет целую часть от деления, а оператор mod оставляет остаток от деления




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 0 then
M:= M + (x mod 10) div 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Условие x mod 2 = 0 означает следующее: чтобы M увеличилось, число
должно быть чётным.
Предположим, исходное
нечётное, тогда на первом шаге M = 0.
Если на втором шаге
также нечётное (вторая цифра исходного числа нечётная), то M = 0,
причём каким бы ни было значение x на третьем шаге, мы не сможем получить M = 7, поскольку
остаток от деления чётного числа на 10 не превосходит 8, а 8 / 2 = 4, следовательно,
вторая
цифра
исходного
чётная
.
Тогда первая цифра может принимать значения 2, 4, 6, 8, но мы ищем наибольшее
, поэтому
сделаем первую цифру, равной 9, тогда наше предположение не удовлетворяет условию задачи,
и последняя цифра исходного числа обязана быть чётной, т.е.
исходное
чётно
.
7 = 4 + 3, чему соответствуют цифры 8 и 6. Теперь, располагая цифры по убыванию, находим
наибольшее возможное
:
= 986.
Ответ: 986.
Ответ: 986
B8
Ниже приведены тексты одной и той же программы, записанные на четырех языках
программирования. Что будет напечатано в результате выполнения этой программы
Бэйсик
Паскаль
Module Task
Sub Main()
Dim L As Integer = 4
Dim R(4) As Integer
Dim N As Integer
R.SetValue(6, 1)
R.SetValue(9, 2)
R.SetValue(6, 3)
R.SetValue(2, 4)
Pr1(L, R)
N = F1(L, R)
Console.Write(N)
Console.WriteLine()
End Sub
Sub Pr1(ByVal L As Integer, ByRef R As Array)
Dim i, n, t As Integer
For i = 1 To L
Program Task;
Uses crt;
const L = 4;
type
atype = array [1..L] of integer;
Var R : atype;
N, p : integer;
Procedure Pr1(L : integer; var R : atype );
var i,n,t : integer;
begin
for i:=1 to L do
begin
t:=(R[i] div 2)*4;
R[i]:=t mod 5;
end;
end;
Function F1 (L : integer; R: atype) : integer;
Var N, i, T : integer;




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L = 3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения М:
if M < x then begin
M:=x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра.
После первого шага M может быть любым однозначным числом, причём на втором шаге число
двузначное, а однозначное число всегда меньше любого двузначного, а значит, M в любом случае
поменяет своё значение. Поэтому выберем третью цифру числа
минимальной
(3) = 0.
Вторая цифра уже не может быть любой, так как при
(2) >
(1) значение переменной M уже не
поменяется на третьем шаге. Поэтому
(2) не превышает 7. Поскольку мы хотим получить
наименьшее число
, мы берём
(1) = 1. Тогда
(2) обязана быть равной 7, в результате полуаем
число 170.
Ответ: 170.
Ответ: 170
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L = 3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения М:
if M < x then begin
M:=x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра.
После первого шага M может быть любым однозначным числом, т. к. на втором шаге число
двузначное, а однозначное число всегда меньше любого двузначного, а значит, M может
приобрести интересующее нас значение 7. Поэтому третья цифра числа
(3) = 9.
Вторая цифра уже не может быть любой, так как при
(2) >
(1) значение переменной M уже не
поменяется на третьем шаге. Поэтому
(2) не превышает 7. Поскольку мы хотим получить
наибольшее число
, мы берём
(1) = 7. Осталось верно определить
(2).
Число
достигнет максимума при
(2)=7, при этом на третьем шаге переменная M уже не
изменится, потому что нарушено условие M < x (7 = 7).
Окончательно получаем:
= 779.
Ответ: 779.
Ответ: 779
B8
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число N, этот
алгоритм печатает число q. Укажите наименьшее из таких чисел N, при вводе которых алгоритм
напечатает 17.
Бейсик
Паскаль
DIM N, q, i AS INTEGER
INPUT N
FOR i = 1 TO N - 1
IF N MOD i = 0 THEN q = i
NEXT i
PRINT q
var N, q, i: integer;
begin
read(N);
for i : = 1 to N - 1 do begin
if N mod i = 0 then q : = i
end;
write(q)
end.
Си
Алгоритмический язык
#include
void main()
{
int N, q, i;
scanf("%d", &N);
for (i = 1; i <= N - 1; i + +) {
if (N%i == 0) q = i;
a = a + 1;
b = b + (x%10);
}
printf("%d", q);
алг
нач
цел
N, q, i
ввод
N
нц
для
i от
1 до
N - 1
если
mod(N, i) = 0
то
q : = i все
кц
вывод
q
кон
Пояснение.
Фрагмент кода находит наибольший делитель N,не равный самому числу N. Для наименьшего N
делитель равен 2, следовательно, N= 2 · 17 = 34.
Ответ: 34




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два
напечатанных числа - это числа 11 и 66. Какое наибольшее число может быть напечатано
третьим?
var x, у, z:= integer;
var r, a, b:= integer;
begin
readln(x, у);
if у >x then begin
z:= x;x:= y;y:= z;
end;
a:= x; b:= у;
while b>0 do begin
r := a mod b;
a := b;
b := r;
end;
writeln (a);
writeln(x);
write(y);
end.
Пояснение.
Сначала вводятся два числа и переставляются так, чтобы в переменной x было наибольшее
число, а в переменной y – наименьшее из двух:
"if у >x then begin
z:= x;x:= y;y:= z;"
"a:= x; b:= у;
while b>0 do begin
r := a mod b;
a := b;
b := r; "
Алгоритм поиска наибольшего общего делителя, который в итоге оказывается в переменной а.
На экран выводится: сначала значение переменной a (наибольший общий делитель исходных
чисел), затем значение x (большее из исходных чисел) и значение y (меньшее из исходных чисел).
По условию первое число — 11, второе — 66. Следовательно, искомое число должно делиться на
11 и быть меньше 66. Наибольшее из таких чисел — 55.
Ответ: 55
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже на четырёх языках записан алгоритм. Получив на вход число x, этот алгоритм печатает
два числа: a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает
сначала 2, а потом 21.
Бейсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A=0: B=1
WHILE X > 0
A = A+1
B = B*(X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do
begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10
end;
writeln(a); write(b);
end.
Си
Алгоритмический язык
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=1;
while (x>0){
a=a+1;
b=b*(x%10);
x= x/10;
}
printf("%d\n%d", a, b);
алг
нач
цел x, a, b
ввод x
a:=0; b:=1
нц пока x>0
a:=a+1
b:=b*mod(x,10)
x:=div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало a = 2, x должно быть двузначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается произведением цифр числа x.
Представим число 21 в виде: 21 = 7 * 3. Другого представления, в котором все множители
однозначные, число 21 не имеет. Следовательно, минимальное число x = 37.
Ответ: 37.
Ответ: 37




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Представим число 72 в виде: 72 = 9 * 8. Другого представления, в котором оба множителя
однозначные число 72 не имеет. Следовательно, максимальное число
= 98.
Ответ: 98.
Ответ: 98
B8
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число N, этот
алгоритм печатает число q. Укажите наименьшее из таких чисел N, при вводе которого алгоритм
напечатает 13.
Бейсик
Паскаль
DIM N, q, i AS INTEGER
INPUT N
FOR i = 1 TO N - 1
IF N MOD i = 0 THEN q = i
NEXT i
PRINT q
var N, q, i: integer;
begin
read(N);
for i : = 1 to N - 1 do begin
if N mod i = 0 then q : = i
end;
write(q)
end.
Си
Алгоритмический язык
#include
void main()
{
int N, q, i;
scanf("%d", &N);
for (i = 1; i <= N - 1; i + +) {
if (N%i == 0) q = i;
a = a + 1;
b = b + (x%10);
}
printf("%d", q);
алг
нач
цел
N, q, i
ввод
N
нц
для
i от
1 до
N - 1
если
mod(N, i) = 0
то
q : = i все
кц
вывод
q
кон
Пояснение.
Фрагмент кода находит наибольший делитель N,не равный самому числу N. Для наименьшего N
делитель равен 2, следовательно, N=13 · 2 = 26.
Ответ: 26




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Таким образом М есть сумма удвоенных цифр числа
, которые принимают чётные значения от 0
до 18.
Для получения наименьшего
положим первую цифру
(1) = 1, она не даст вклад на третьем
шаге цикла, потому что не будет выполняться условие M < x, а для того, чтобы сумма удвоенных
цифр была равна 28, вторая и треться цифры должны быть больше нуля.
Сделаем цифру
(3) максимально воможной, чтобы уменьшить вторую цифру и достичь
минимума:
(3) = 9, тогда 9 * 2 = 18, а
(2) = (28 - 18) / 2 = 5, но тогда не выполняется условие M < x (18 >
15) и значение 28 не достигнется.
(3) = 8, тогда 8 * 2 = 16, а
(2) = (28 - 16) / 2 = 6, условие M < x не выполняется (16 = 16) и
значение 28 не достигнется.
(3) = 7, тогда 7 * 2 = 14, а
(2) = (28 - 14) / 2 = 7, M < x (14 < 17) и значение 28 достигaется.
Окончательно находим наименьшее число
: 177.
Ответ: 177.
Ответ: 177
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает
сначала 2, а потом 72.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A=0: B=1
WHILE X > 0
A = A+1
B = B*(X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do
begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=1;
while (x>0){
a=a+1;
b=b*(x%10);
x= x/10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=1
нц пока x>0
a:=a+1
b:=b*mod(x,10)
x:=div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Чтобы получить M = 10, в числе
должна быть цифра 5. Это можно сделать уже на первом шаге.
На втором шаге число
уже двузначное, и поскольку мы ищем максимальное число, то условие M
< x будет выполняться. Однако, мы можем нарушить условие нечётности (x mod 2 = 1), если
сделаем вторую цифру чётной, тогда M далее не изменится, потому что на третьем шаге
останется только первая цифра числа
, а любое однозначное число меньше любго двузначного,
включая 10.
Поэтому первая цифра может быть любой, положим её равной 9, вторая цифра должна быть
чётной — выбираем наибольшую, т. е. 8. В результате получаем число 985.
Ответ: 985.
Ответ: 985
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 28.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:= M + (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if M < x then begin
M:= M + (x mod 10) * 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а потом
0.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Если b =
(1) *
(2) *
(3) = 0, где число в скобках означает номер цифры в числе
, то хотя бы
один из множителей равен нулю, но это ознчает, что на каком-то шаге
нацело делится на 10.
Если это происходит на первом шаге, то
(1) и
(2) могут быть любыми однозначными числами. Т.
к. мы хотим получить наибольшее число, то
= 990.
Ответ: 990.
Ответ: 990
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 10.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Представим число 14 в виде: 14 = 7 * 2. Другого представления, в котором оба множителя
однозначные число 14 не имеет. Следовательно, максимальное число
= 72.
Ответ: 72.
Ответ: 72
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 10.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if M < x then begin
M:= (x mod 10) * 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Чтобы M приняло значение M = 10 в числе x должно присутствовать цифра 5.
Т. к. мы ищем наибольшее
, сделаем первую цифру исходного числа, равной 9, при этом если
вторая цифра 5, тогда на третьем шаге условие M <
не выполняется (10>9), и на экране мы
получим нужное нам число.
Осталось определить последнюю цифру исходного числа
. После первого шага
= 95, но
максимальный остаток от деления на 10 равен 9, следовательно, M после первого шага не может
превысить 9 * 2 = 18, а 18 < 95, значит будет выполняться нужный нам второй шаг.
Искомое число 959.
Ответ: 959.
Ответ: 959




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало a = 2, x должно быть двузначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b * (x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается произведением цифр числа x.
У числа 35 существуют два делителя, меньших 10, 7 и 5. Следовательно, существуют два x,
удовлетворяющие заданным a и b: 75 и 57. В задании указано найти наибольший x,
следовательно, правильный ответ — 75.
Ответ: 75
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает начала
2, а потом 14.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A = 0: B = 1
WHILE X > 0
A = A + 1
B = B * (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do
begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 1;
while (x > 0){
a = a + 1;
b = b *(x%10);
x= x / 10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a := 0; b := 1
нц пока x > 0
a := a+1
b := b * mod(x,10)
x := div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 0 then
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Чтобы значение M осталось нулевым, нужно, чтобы условие x mod 2 = 0 не выполнялось, либо
чтобы выполнялось x mod 10 = 0. А значит, все цифры этого числа могут быть либо нечётными,
либо первая цифра нечётная и остльные нули. Но мы ищем минимальное
, поэтому искомое
число 100.
Ответ: 100.
Ответ: 100
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число х, этот алгоритм печатает два
числа а и Ь. Укажите наибольшее из таких чисел х, при вводе которых алгоритм печатает
сначала 2, а потом 35.
Бэйсик
Паскаль
DIM X А, В AS INTEGER
INPUT X
А=0 : B=1
WHILE X > 0
А = A+1
В = В * (X MOD 10)
X = X \ 10
WEND
PRINT А
PRINT В
var х, а, b: integer;
begin
readln (x);
а := 0 ; b := 1;
while x>0 do
begin
a := a + 1;
b : = b * (x mod 10);
х := x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=1;
while (x>0) {
a = a+1;
b = b * (x%10);
x = x/10;
}
printf("%d\n%d", a, b);
алг
нач
цел
х, a, b
ввод
x
а := 0; Ь := 1
нц
пока
х>0
а := а+1
b := b * mod(х, 10)
х := div(х, 10)
кц
вывод
а, нc
, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 2, а потом
14.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Представим число 14 в виде: 14 = 7 * 2. Другого представления, в котором оба множителя
однозначные число 14 не имеет. Следовательно, минимальное число
= 27.
Ответ: 27.
Ответ: 27
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 0.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает
сначала 2, а потом 10.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A=0: B=0
WHILE X > 0
A = A+1
B = B +(X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x>0 do
begin
a:=a + 1;
b:=b + (x mod 10);
x:=x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=0;
while (x>0){
a = a+1;
b = b +(x%10);
x = x/10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=0
нц пока x>0
a:=a+1
b:=b+mod(x,10)
x:=div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b + (x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается суммой цифр числа
.
Чтобы получить наибольшее
положим его первую цифру равной
(1) = 9. Тогда вторая цифра
(2) будет равна 10 - 9 = 1, следовательно ниабольшее число
= 91.
Ответ: 91.
Ответ: 91




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два
напечатанных числа - это числа 7 и 42. Какое наибольшее число может быть напечатано
третьим?
var x, у, z:= integer;
var r, a, b:= integer;
begin
readln(x, у);
if у >x then begin
z:= x;x:= y;y:= z;
end;
a:= x; b:= у;
while b>0 do begin
r := a mod b;
a := b;
b := r;
end;
writeln (a);
writeln(x);
write(y);
end.
Пояснение.
Сначала вводятся два числа и переставляются так, чтобы в переменной x было наибольшее
число, а в переменной y – наименьшее из двух:
"if у >x then begin
z:= x;x:= y;y:= z;"
"a:= x; b:= у;
while b>0 do begin
r := a mod b;
a := b;
b := r; "
Алгоритм поиска наибольшего общего делителя, который в итоге оказывается в переменной а.
На экран выводится: сначала значение переменной a (наибольший общий делитель исходных
чисел), затем значение x (большее из исходных чисел) и значение y (меньшее из исходных чисел).
По условию первое число — 7, второе — 42. Следовательно, искомое число должно делиться на 7
и быть меньше 42. Наибольшее из таких чисел — 35.
Ответ: 35
B8
Десятичное число 57 в некоторой системе счисления записывается как 212.
Определите основание системы счисления.
Пояснение.
Составим уравнение:
где
— основание этой системы счисления. У этого уравнения есть два корня,
и
Так как основание системы счисления должно быть целым и неотрицательным,
Ответ: 5




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
цифр в x. Для того, чтобы a стало равным 6, x должно быть трехзначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b+(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается суммой цифр числа x.
Представим число 9 в виде: 9 = 1+0+8. Это не единственные цифры, с помощью суммы которых
можно представить число , но они дают минимальное трехзначное число - 108. Следовательно, x
= 108.
Ответ: 108.
Ответ: 108
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
Таким образом М есть сумма цифр числа
.
Представим 7 в виде суммы: 7 = 7 + 0 + 0 = 1 + 6 + 0 = 1 + 5 + 1 = 1 + 4 + 2 = 1 + 3 + 3 и т. д.
Видно, что мы не можем использовать цифры больше 7, поэтому для получения максимального
числа используем представление 7 = 7 + 0 + 0.
Из этих цифр составим наибольшее число: 700.
Ответ: 700.
Ответ: 700




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 3,
должно быть трехзначным.
Теперь рассмотрим изменение b:
while x>0 do begin
b:=b + (x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается суммой цифр числа
.
Чтобы получить наименьшее
положим его первые две цифры нулем и шестью. Тогда третья
цифра
(3) будет равна 7 − 2 = 5, следовательно, наименьшее число
= 106.
Ответ: 106.
Ответ: 106
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает
сначала 6, а потом 9.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A = 0: B = 0
WHILE X > 0
A = A + 2
B = B + (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a := 0; b := 0;
while x>0 do
begin
a := a + 2;
b := b + (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 0;
while (x > 0){
a = a + 2;
b = b + (x%10);
x = x / 10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=0
нц пока x > 0
a := a + 2
b := b+mod(x,10)
x := div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 2. Следовательно, конечное значение a совпадает с числом




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Уже на первом шаге можно получить x mod 10 = 8, если последняя цифра числа
есть 8. Далее
можно сделать так, чтобы M больше не менялось: для этого нарушим условие x mod 2 = 0, т. е.
сделаем первые две цифры исходного числа
нечётными, при этом нам уже не будет важно
условие M < x. Тогда наименьшее значение вводимого числа
= 118.
Ответ: 118.
Ответ: 118
B8
Ниже на 4 языках программирования записан алгоритм. Получив на вход число х, этот
алгоритм печатает два числа а и Ь. Укажите наименьшее из таких чисел х. при вводе которых
алгоритм печатает сначала 3. а потом 7.
Бейсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A=0: B=0
WHILE X > 0
A = A + 1
B = B + (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a: = 0; b: = 0;
while x>0 do
begin
a : = a + 1;
b : = b + (x mod 10);
x : = x div 10
end;
writeln(a); write(b);
end.
Си
Алгоритмический язык
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 0;
while (x>0){
a = a + 1;
b=b+(x%10);
x = x / 10;
}
printf("%d\n%d", a, b);
алг
нач
цел
x, a, b
ввод
x
a: = 0; b: = 0
нц пока
x>0
a : = a + 1
b : = b + mod(x,10)
x : = div (x,10)
кц
вывод
a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а потом
36.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Представим число 36 в виде: 36 = 6 * 6 * 1 = 4 * 9 * 1 = 9 * 2 * 2 = 3 * 2 * 6. Другого
представления, в котором все множители однозначные число 36 не имеет. Мы хотим, чтобы
было наименьшим, поэтому выберем первую цифру равной 1. Тогда оставшяся пара цифр может
быть 9 и 4, либо 6 и 6. Составим из них наименьшее число и припишем его к единице. В
результате получим 149.
Ответ: 149.
Ответ: 149
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 8.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Теперь мы имеем квадратное уравнение с одним неизвестным, решив которое мы найдем N.
Так как N должно быть натуральным, ответ: 7.
Ответ: 7
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 0.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 0 then
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Чтобы значение M осталось нулевым, нужно, чтобы условие x mod 2 = 0 не выполнялось, либо
чтобы выполнялось x mod 10 = 0. А значит, все цифры этого числа могут быть либо нечётными,
либо первая цифра нечётная и остльные нули. Но мы ищем максимальое
, поэтому искомое число
999.
Ответ: 999.
Ответ: 999




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Чтобы получить наименьшее
положим его первую цифру равной
(1) = 1. Тогда вторая цифра
(2) будет равна 10 - 1 = 9, следовательно наименьшее число
= 19.
Ответ: 19.
Ответ: 19
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 8.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 0 then
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Условие x mod 2 = 0 означает следующее: чтобы M увеличилось, число
должно содержать
чётные цифры. Следовательно переменная М есть сумма чётных цифр числа
.
Поскольку мы хотим получить наименьшее число, то положим первую цифру в числе
равной 1.
Остаток от деления на 10 принимает значения от 0 до 9. Значит мы можем получить М = 8, уже
на первом шаге, если последняя цифра равна 8. Чтобы не увеличить число М вторая цифра
должна быть либо нечётной, либо нулём. Исходя из условия, получаем искомое число 108.
Ответ: 108.
Ответ: 108
B8
Десятичное число 63 в некоторой системе счисления записывается как 120.
Определите основание системы счисления.
Пояснение.
Напишем формулу перевода десятичного числа 63 в систему счисления с основанием N, в которой
оно записывается как 120.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
У числа 21 существуют два делителя, меньших 10, 3 и 7. Следовательно, существуют два x,
удовлетворяющие заданным a и b: 73 и 37. В задании указано найти наибольший x,
следовательно, правильный ответ — 73.
Ответ: 73
B8
Запишите десятичное число 100 в системе счисления с основанием 9.
Пояснение.
Переведем 100 в 9-ричную систему счисления.
Ответ - 121.
Ответ: 121
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает
сначала 2, а потом 10.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A=0: B=0
WHILE X > 0
A = A+1
B = B +(X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x>0 do
begin
a:=a+1;
b:=b + (x mod 10);
x:=x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=0;
while (x>0){
a = a+1;
b = b + (x%10);
x = x/10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=0
нц пока x>0
a:=a+1
b:=b+mod(x,10)
x:=div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b + (x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается суммой цифр числа
.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Для получения наименьшего
положим первую цифру
(1) = 1, она даст вклад 1 на третьем шаге
цикла.
Представим 7 в виде суммы: 7 = 1 + 6 = 1 + 5 + 1 = 1 + 4 + 2 = 1 + 3 + 3. Если мы будем
использовать сумму из двух слагаемых, то сможем занулить вторую цифру и третья окажется
равной 6. А т. к. 6 меньше любого двузначного числа, то и наименьшее число
получится ранвым
106.
Ответ: 106.
Ответ: 106
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число х, этот алгоритм печатает два
числа а и Ь. Укажите наибольшее из таких чисел х, при вводе которых алгоритм печатает
сначала 2, а потом 21.
Бэйсик
Паскаль
DIM X А, В AS INTEGER
INPUT X
А=0 : B=1
WHILE X > 0
А = A+1
В = В*(X MOD 10)
X = X \ 10
WEND
PRINT А
PRINT В
var х, а, b: integer;
begin
readln (x) ;
а: = 0 ; b : = 1;
while x>0 do
begin
а : = a + 1 ;
b : = b*(x mod 10) ;
х : = x div 10;
end ;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a=0; b=1;
while (x>0){
a = a+1 ;
b = b*(x%10);
x = x /10 ;
}
printf("%d\n%d", a, b);
алг
нач
цел х, a, b
ввод x
а : = 0; Ь : = 1
нц пока х>0
а := а+1
b := b*mod(х,10)
х:=div(х,10)
кц
вывод а, нc, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало a = 2, x должно быть двузначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b * (x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается произведением цифр числа x.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 1 then
M:= M + (x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
Заметим, что x mod 10 принимает значения от 0 до 9, но мы хотим получить сумму остатков от
трёх делений 8, поэтому брать в качестве цифр числа
цифру 9 мы не можем.
Чтобы М увеличивалось число
должно содержать нечётные цифры (об этом говорит условие x
mod 2 = 1). Чтобы их отыскать представим 8 как сумму нечётных чисел: 8 = 7 + 1 = 5 + 3. Других
вариантов представления у нас нет. Значит, нужно, чтобы две цифры были нечётными, и одна
чётной.
Мы хотим получить максимальное число, поэтому поставим на первое место 8, т. к. 8 больше
любого нечётного числа, кроме 9. Тогда из представления числа 8 в виде суммы найдём и две
другие цифры. Из цифр 8, 7, 1 и 8, 5, 3 можно составить числа и выбрать наибольшее, таким
будет число 871.
Ответ: 871.
Ответ: 871
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
M:= M + x mod 10;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
Таким образом М есть сумма цифр числа
.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а потом
7.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
b =
(1) *
(2) *
(3) = 7, где число в скобках означает номер цифры в числе
. Число 7 простое,
поэтому 7 = 7 * 1 * 1. Составляем максимальное число: 711
Ответ: 711.
Ответ: 711
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 8.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Ответ: 89.
Ответ: 89
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наибольшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
x mod 10 принимает значения от 0 до 9, следовательно, (x mod 10) div 2 — от 0 до 4. Отсюда
следует, что для получения числа 7 нужно не менее двух слгаемых, полученных в цикле как (x
mod 10) div 2. Для этого необходимо, чтобы хотя бы две цифры в числе
были нечётными,
поскольку есть условие x mod 2 = 1.
Представим 7 в виде: 7 = 4 + 3.
Для получения наибольшего
положим первую цифру
(1) = 9, она даст вклад 4 на третьем шаге
цикла, тогда другая цифра числа
должна быть раной 7, она даст вклад 3 на втором или на
первом шаге цикла. Оставшуюся цифру мы должны выбрать чётной, а наибольшая чётная цифра
есть 8.
Теперь составляем из этих цифр наибольшее число:
= 987.
Ответ: 987.
Ответ: 987




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число L
столько же раз увеличивается на 1. Следовательно, конечное значение L совпадает с числом
цифр в
. Для того, чтобы L стало L=3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения M:
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
.
x mod 10 принимает значения от 0 до 9, следовательно, (x mod 10) div 2 — от 0 до 4. Отсюда
следует, что для получения числа 7 нужно не менее двух слгаемых, полученных в цикле как (x
mod 10) div 2. Для этого необходимо, чтобы хотя бы две цифры в числе
были нечётными.
Представим 7 в виде: 7 = 4 + 3.
Для получения наименьшего
положим первую цифру
(1) = 1, она даст вклад 0 на третьем шаге
цикла, а вторую цифру
(2) = 7, она даст вклад 3 на втором шаге цикла. Остаётся сделать
(3) =
9, и получим окончательный ответ:
= 179.
Ответ: 179.
Ответ: 179
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 2, а потом
72.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 2,
должно быть
двузначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
Представим число 72 в виде: 72 = 9 * 8. Другого представления, в котором оба множителя
однозначные число 72 не имеет. Следовательно, минимальное число
= 89.




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
Укажите наименьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а потом
7.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это
равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи
отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом
цифр в
. Для того, чтобы a стало a = 3,
должно быть
трёхзначным
.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя цифра
следовательно, число b получается произведением цифр числа
.
b =
(1) *
(2) *
(3) = 7, где число в скобках означает номер цифры в числе
. Число 7 простое,
поэтому 7 = 7 * 1 * 1. Составляем минимальное число: 117
Ответ: 117.
Ответ: 117
B8
Ниже записана программа. Получив на вход число
, эта программа печатает два числа,
и
. Укажите наменьшее из таких чисел
, при вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Вариант № 208084
B8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает
сначала 6, а потом 5.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A = 0: B = 0
WHILE X > 0
A = A + 2
B = B + (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a := 0; b := 0;
while x>0 do
begin
a := a + 2;
b := b + (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 0;
while (x > 0){
a = a + 2;
b = b + (x%10);
x = x / 10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=0
нц пока x > 0
a := a + 2
b := b+mod(x,10)
x := div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 2. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало равным 6, x должно быть трехзначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b+(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается суммой цифр числа x.
Представим число 5 в виде: 5 = 1+0+4. Это не единственные цифры, с помощью суммы которых
можно представить число 5, но они дают минимальное трехзначное число - 104. Следовательно,
x = 104.
Ответ: 104.
Ответ: 104




2013
24.05.2013
http://shpargalkaege.ru


http://vk.com/shpargalkaege
Шпаргалка
ЕГЭ
Подготовка
ЕГЭ
24.05.2013
http://shpargalkaege.ru
Группа
http://vk.com/shpargalkaege
8
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два
числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает
сначала 6, а потом 5.
Бэйсик
Паскаль
DIM X, A, B AS INTEGER
INPUT X
A = 0: B = 0
WHILE X > 0
A = A + 2
B = B + (X MOD 10)
X = X \ 10
WEND
PRINT A
PRINT B
var x, a, b: integer;
begin
readln(x);
a := 0; b := 0;
while x>0 do
begin
a := a + 2;
b := b + (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
Си
Алгоритмический
#include
void main()
{
int x, a, b;
scanf("%d", &x);
a = 0; b = 0;
while (x > 0){
a = a + 2;
b = b + (x%10);
x = x / 10;
}
printf("%d\n%d", a, b);
}
алг
нач
цел x, a, b
ввод x
a:=0; b:=0
нц пока x > 0
a := a + 2
b := b+mod(x,10)
x := div(x,10)
кц
вывод a, нс, b
кон
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет целую часть от деления, то при делении на 10 это равносильно
отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя
цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл
выполняется столько раз, сколько цифр в десятичной записи введенного числа, при этом число a
столько же раз увеличивается на 2. Следовательно, конечное значение a совпадает с числом
цифр в x. Для того, чтобы a стало равным 6, x должно быть трехзначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b+(x mod 10);
end;
Оператор mod оставляет остаток от деления, при делении на 10 это последняя цифра x;
следовательно, число b получается суммой цифр числа x.
Представим число 5 в виде: 5 = 1+0+4. Это не единственные цифры, с помощью суммы которых
можно представить число 5, но они дают минимальное трехзначное число - 104. Следовательно,
x = 104.
Ответ: 104.
Ответ: 104

Приложенные файлы

  • pdf 7842430
    Размер файла: 3 MB Загрузок: 0

Добавить комментарий