Задача 2: Счастливые билеты Известно, что счастливым считается полученный в общественном транспорте билет, в шестизначном номере которого сумма первых трёх цифр совпадает с суммой трёх последних. Например, билет с номером 513702 является счастливым, потому что 5 + 1 + 3 = 9 и 7 + 0 + 2 = 9.
Петя всю неделю ездил в школу на автобусе и теперь у него есть 5 билетов с номерами:
826179 867288 281999 199992 304802 К сожалению, все эти билеты несчастливые (можете проверить Пете для каждого билета узнать ближайший к нему больший номер счастливого билета.
В ответе нужно записать пять шестизначных чисел, по одному в строке. Каждое записанное число должно быть счастливым номером, большим номера билета Пети, и при этом наименьшим из всех таких чисел.
Порядок записи чисел в ответе менять нельзя. Если Вы не можете найти ответ для какого-то из данных чисел, вместо этого ответа запишите любое шестизначное число.
var
Numbers: array [1..6] of integer;
x, summ12, summ56, countN, r : integer;
begin
for var i := 100000 to 999999 do begin
// берем каждое число от 100000 до 999999
x := i;
for var j := 1 to 6 do begin
// mod - получаем остаток от деления X на 10
// например для 12345.6 остаток от деления - 6
Numbers[7 - j] := x mod 10;
//записываем цифры в обратном порядке (справа налево), поэтому [7 - j]
// div - получаем целую часть числа от деления X на 10
// например, для 1234.5 целая часть - 12345
x := x div 10;
// теперь X будет на 1 разряд меньше (например X = 12345)
// делим 6 раз X на 10
// например (1) 12345.[6] => (2) 1234.[5] => (3) 123.[4] => (4) 12.[3] => (5) 1.[2] = > 0.[1]
end;
// считаем суммы двух первых и последних
summ12 := Numbers[1] + Numbers[2];
summ56 := Numbers[5] + Numbers[6];
// и разницу между суммами
r := summ12 - summ56;
// разница может быть 5 или -5
// abs() - возвращает модуль числа
// приводим разницу в положительное число
// если разница не более 5, то число счастливое
if(abs(r) <= 5) then countN := countN + 1;
end;
writeln('Количество счастливых чисел: ', countN);
end.
Объяснение:
для PascalABC
это задача под номером 2
Получив цифры с
x mod y
x div y
можно (для других задач) изменить расчет суммы и условие счета количества
program sorting;
const
N = 10;
var
v: array[1..N] of integer;
d: integer;
i, t: integer;
k: boolean;
begin
randomize;
write('ДО сортировки: ');
for i := 1 to N do
begin
readln(v[i])
write(v[i]:6);
end;
}
d := N div 2;
while(d > 0) do
begin
k := true;
while k do
begin
k := false;
i := 1;
for i := 1 to N - d do
begin
if(v[i] > v[i + d]) then
begin
t := v[i];
v[i] := v[i + d];
v[i + d] := t;
k := true;
end;
end;
end;
d := d div 2;
end;
writeln;
write('ПОСЛЕ сортировки: ');
for i := 1 to N do
write(v[i]:6);
writeln;
end.