Автомат получает на вход трёхзначное десятичное число. По полученному числу строится новое десятичное число по следующим правилам. Вычисляются два числа – сумма старшего и среднего разрядов, а также сумма среднего и младшего разрядов заданного числа.
Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).
Пример. Исходное число: 455. Поразрядные суммы: 9, 10.
Результат: 109.
Определите, сколько из приведённых ниже чисел может получиться в результате работы автомата.
1717 159 175 142 214 514 814 114
В ответе запишите только количество чисел.
126
401
Ответы на вопрос:
Максимальная цифра м.б. 9, значит сумма цифр не может быть больше 18
1) Сначала уберем из списка все возрастающие - 1619 316 916
останется 1616 169 163 1916 116
2) Из этого списка удалим также 1916, т.к 19 не может быть (сумма цифр макс 18)
Останется 1616 169 163 116
3) Рассмотрим, все ли числа могли получится, как результат сложения
1616 могло получится, если число, например, 888. Значит его оставляем
169 - например, 972 или 881. Значит, тоже подходит
163 - 16 может получиться как сумма 8+8 7+9, но тогда мы не получим 3. Т.е. это число не подходит - удаляем
116 - это, например, 560, 651, т.е подходит
Значит осталось 1616, 169, 116
ответ: 3
Program olympic; const nmax = 50; { максимум 50 команд } cgold = 7; csilver = 6; cbronze = 5; type cname = string[20]; rc = record position: byte; name: cname; ngold: byte; nsilver: byte; nbronze: byte; ctotal: byte end; tm = array[1..nmax, 1..2] of byte; procedure shell(var a: tm; n: integer); { сортировка методом шелла массива a[1..n, 1..2] по убыванию значений элементов второго столбца. } var i, j, step, t1, t2: integer; begin step : = n div 2; while step > 0 do begin for j : = n - step downto 1 do begin i : = j; while i < = n - step do begin if a[i, 2] < a[i + step, 2] then begin t1 : = a[i, 1]; t2 : = a[i, 2]; a[i, 1] : = a[i + 1, 1]; a[i, 2] : = a[i + 1, 2]; a[i + 1, 1] : = t1; a[i + 1, 2] : = t2 end; i : = i + step end end; step : = step div 2 end end; { основная программа } var f: file of rc; a: tm; i, n: byte; s: cname; t: rc; begin { организуем ввод данных } assign(f, 'olympic.in'); rewrite(f); n : = 0; repeat writeln('введите наименование команды или * для окончания ввода'); readln(s); if s[1] < > '*' then begin n : = n + 1; write('количество медалей: золото, серебро, бронза: '); readln(t.ngold, t.nsilver, t.nbronze); t.position : = n; t.name : = s; t.ctotal : = t.ngold * cgold + t.nsilver * csilver + t.nbronze * cbronze; write(f, t); a[n, 1] : = t.position; a[n, 2] : = t.ctotal end until s[1] = '*'; reset(f); { выполняем сортировку заполненного массива a, определяя положение записей в файле } shell(a, n); { выводим результаты, используя прямой доступ к файлу } writeln('результаты олимпиады'); for i : = 1 to n do begin seek(f, a[i, 1] - 1); read(f, t); writeln(i, ': ', t.name, '(', t.ngold, ' зол, ', t.nsilver, ' сер, ', t.nbronze, ' бронз), очков- ', t.ctotal) end; close(f); end. тестовое решение: введите наименование команды или * для окончания ввода веселые медузы количество медалей: золото, серебро, бронза: 4 6 10 введите наименование команды или * для окончания ввода юные сурки количество медалей: золото, серебро, бронза: 2 0 5 введите наименование команды или * для окончания ввода черепашки-ниндзя количество медалей: золото, серебро, бронза: 3 7 11 введите наименование команды или * для окончания ввода * результаты олимпиады 1: черепашки-ниндзя(3 зол, 7 сер, 11 бронз), очков- 118 2: веселые медузы(4 зол, 6 сер, 10 бронз), очков- 114 3: юные сурки(2 зол, 0 сер, 5 бронз), очков- 39
Популярно: Информатика
-
Василиска5506.03.2023 05:24
-
liliannaklochko27.09.2022 22:02
-
bazroval08.05.2020 17:41
-
илрлрле22.12.2022 12:25
-
allanazarova1224.05.2021 15:28
-
camcalol12.07.2020 03:14
-
Нови4ок22821.02.2023 04:40
-
жепа56413.02.2020 19:42
-
хасан0218.01.2022 08:46
-
aidana20025714.11.2020 20:37