Задание 20. Ответы и решения
20.1 ( ege.yandex.ru – 1) Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 5.
Бейсик | Паскаль |
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<stdio.h> 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, a, b. При инициализации x – исходное натуральное число; a=0, b=1. Посмотрим, что происходит при выполнении основного цикла
нц пока x>0 a:=a+1 b:=b*mod(x,10) x:=div(x,10) кцЗначение a при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной a равно количеству выполнения цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – напечатанное значение переменной a) равно количеству цифр в исходном числе x. Значение переменой b умножается на выражение mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Поэтому, итоговое значение переменной b равно произведению цифр исходного числа.
Пример выполнения цикла, если начальное значение x=423 приведен в таблице.№ прохода | Начальные значения | Рабочие значения | Конечные значения | |||||
x | a | b | mod(x, 10) | div(x, 10) | x | a | b | |
1 | 423 | 0 | 1 | 3 | 42 | 42 | 1 | 3 |
2 | 42 | 1 | 3 | 2 | 4 | 4 | 2 | 6 |
3 | 4 | 2 | 6 | 4 | 0 | 0 | 3 | 24 |
Таким образом, в задаче требуется найти наибольшее трехзначное число, в котором произведение цифр равно 5. Это число – 511.
20.2 ( ege.yandex.ru – 2) Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 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<stdio.h> 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, a, b. При инициализации x – исходное натуральное число; a=0, b=1. Посмотрим, что происходит при выполнении основного цикла
нц пока x>0 a:=a+1 b:=b*mod(x,10) x:=div(x,10) кцЗначение a при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной a равно количеству выполнения цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – напечатанное значение переменной a) равно количеству цифр в исходном числе x. Значение переменой b умножается на выражение mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Поэтому, итоговое значение переменной b равно произведению цифр исходного числа.
Таким образом, в задаче требуется найти наименьшее трехзначное число, в котором произведение цифр равно 14. Число 14 можно только одним способом представить в виде произведения трех однозначных чисел (порядок чисел здесь не учитывается): 14 = 1 х 2 х 7. Наименьшее число, составленное из этих цифр - 127.
20.3 ( ege.yandex.ru – 3) Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 8.
Бейсик | Паскаль |
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<stdio.h> 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, a, b. При инициализации x – исходное натуральное число; a=0, b=0. Посмотрим, что происходит при выполнении основного цикла
нц пока x>0 a:=a+1 b:=b+mod(x,10) x:=div(x,10) кцЗначение a при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной a равно количеству выполнения цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – напечатанное значение переменной a) равно количеству цифр в исходном числе x. К значению переменой b прибавляется значение выражения mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Поэтому, итоговое значение переменной b равно сумме цифр исходного числа.
Таким образом, в задаче требуется найти наибольшее двузначное число, в котором сумма цифр равно 8. Это число – 80.
20.4 ( ege.yandex.ru – 4) Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 8.
Бейсик | Паскаль |
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<stdio.h> 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, a, b. При инициализации x – исходное натуральное число; a=0, b=0. Посмотрим, что происходит при выполнении основного цикла
нц пока x>0 a:=a+1 b:=b+mod(x,10) x:=div(x,10) кцЗначение a при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной a равно количеству выполнения цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – напечатанное значение переменной a) равно количеству цифр в исходном числе x. К значению переменой b прибавляется значение выражения mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Поэтому, итоговое значение переменной b равно сумме цифр исходного числа.
Таким образом, в задаче требуется найти наименьшее двузначное число, в котором сумма цифр равно 8. Это число – 17.
20.5 ( ege.yandex.ru – 5) Ниже на 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<stdio.h> 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, a, b. При инициализации x – исходное натуральное число; a=0, b=0. Посмотрим, что происходит при выполнении основного цикла
нц пока x>0 a:=a+1 b:=b+mod(x,10) x:=div(x,10) кцЗначение a при каждом выполнении цикла увеличивается на 1, значит итоговое значение переменной a равно количеству выполнения цикла. От числа x при каждом выполнении цикла «отбрасывается» последняя цифра (операция x:=div(x,10) ). Таким образом, количество выполнений цикла (оно же – напечатанное значение переменной a) равно количеству цифр в исходном числе x. К значению переменой b прибавляется значение выражения mod(x,10). Это - последняя цифра текущего значения x, т.е. очередная цифра исходного числа. Поэтому, итоговое значение переменной b равно сумме цифр исходного числа.
Таким образом, в задаче требуется найти количество двузначных чисел, у которых сумма цифр равно 10. Таких чисел есть девять: 19, 28, 37, 46, 55, 64, 73, 82, 91.
Ответ: 9
28 комментариев
Почему в В7.2 ответ не 721?
Не дочитала задание. Всё ясно (:
В B7.2 14 можно представить как 14*1*1, в таком случае ответ получается 124<127. Поправьте меня, если я не права.
Поправляю 🙂 14 - это произведение ЦИФР исходного числа. Для числа 124 это произведение равно 1*2*4 = 8 (а не 14 🙁 ). А как из 14*1*1 получилось 124?
Получилось потому, что сильно хотелось 🙂 Но я ошибку поняла 🙂 Спасибо:-)
а мне ни чего не понятно =( а завтра экзамен =(
1. Посмотри ответ Владимиру http://ege-go.ru/zadania/grb/b7/b7-answ/comment-page-1/#comment-421
Попробуй почитать решение на сайте и сделать то, что говорится в комменте. Потом задавай вопросы поконкретнее.
2. А сколько баллов ты собираешься получить? Может, ну ее, B7? 🙂
баллов чем больше, тем лучше. может и ну ее эту в7, а может мозг сегодня уже не хочет работать а завтра может все впомню и решу
как определять когда нужно трехзначное число? а когда двухзначное??
как определять когда нужно трехзначное число? а когда двухзначное??
В задаче B7.1 значение переменной a после выполнения программы - это количество цифр в исходном числе x,
смотри таблицу выполнения цикла в решении. В остальных задачах - аналогично.
не может быть? чтоб ответ получился 9,скорее 19!!!
1. Пиши номер задачи! Я решил, что это про B7.5
2. В задаче спрашивается "Сколько есть таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 10?"
А ты отвечвешь на вопрос - какое из них наименьшее.
Будь внимательнее! Если устала - лучше отдохни 🙂
я все равно не могу с вами согласиться,во-первых, это должно быть двухзначное число,а во-вторых,выражение 9+0 никогда не будет равным 10!!!может еще раз проверите 5 вариант задание В7, заранее спасибо!!!=)
Поздно, пора спать! 🙂 Вот, что написано на сайте:
"В задаче требуется найти количество двузначных чисел, у которых сумма цифр равно 10. Таких чисел есть девять: 19, 28, 37, 46, 55, 64, 73, 82, 91. Ответ: 9" И это правда! 🙂
БОНУС: повторяю коммент от DM:
ДМ 27.05.2012 в 7:27 пп
«b:=b + x mod 10);» — стоит «+» — находим сумму.
«b:=b * x mod 10);» — стоит «*» — ищем произведение. Почему это нельзя было сказать сразу — хз
a:=a+1
b:=b+mod(x,10)
когда такое в программе то складываем числа? получается выводится число по сумме
Получается - выводим сумму цифр. Молодец!
Скажите плиз а как понять где произведение? Где сумма?
Посмотри ответ Владимиру http://ege-go.ru/zadania/grb/b7/b7-answ/comment-page-1/#comment-421
не могу разобраться, когда надо произведение цифр, а когда их сумма? типа если трехзначное число то нужно находить произведение цифр, а если двухзначное, то сумму цифр? или я дурак?=D
Начну с последнего вопроса. Ты не дурак, потому, что догадался нам написать 🙂
По первому вопросу. Конечно, дело не в том, сколько цифр. Что именно вычисляется, определяется тем,
как в цикле меняется переменная b. Посмотри еще раз решение задачи, попробуй вручную или пошагово на компьютере прокрутить программы.
Я вставил на сайте пример такой прокрутки для B7.1 Не разберешься - напиши снова.
видимо я тормоз !
я не могу понять когда складывать , а когда умножать ?!
Каждый по-своему тормоз 🙂
Посмотри ответ Владимиру http://ege-go.ru/zadania/grb/b7/b7-answ/comment-page-1/#comment-421
Лучше я на такой общий вопрос не отвечу. Если не разберешься, попробуй задать вопрос поконкретнее.
Успехов!
"b:=b + x mod 10);" - стоит "+" - находим сумму.
"b:=b * x mod 10);" - стоит "*" - ищем произведение. Почему это нельзя было сказать сразу - хз
Спасиибо...быстро и понятно!
Здорово! Очень помогло разобраться:)
Спасибо. Удачи!
Аналогично)