
ДАЮ 50 БАЛЛОВ!!! ПАСКАЛЬ Вводится шестизначное натуральное число. Проверить, является ли оно
счастливым (сумма первых трёх цифр равна сумме последних трёх цифр) и, если не является, вывести ближайшее счастливое число.

Ответы на вопрос

Вот несколько версий такой программы (все ищут ближайшее счастливое число сразу и вверх и вниз):
1) обычная версия, лучше её и использовать (вроде должна работать везде), либо третью версию
var a,b,n,i,t,s: integer;
begin
write('Введите шестизначное натуральное число: ');
read(a);
n:=0;
repeat
n:=n+1;
t:=a+(n div 2)*(1-2*(n mod 2)); // младш.разряд-знак, остальные-число
if t<100001 then t:=100001;
if t>999999 then t:=999999;
b:=t;
s:=0;
for i:=0 to 5 do
begin
s:=s+(t mod 10)*(1-2*(i div 3)); // правые 3 цифры берём с минусом
t:=t div 10;
end;
until s=0;
write('Ближайшее счастливое число: ',b);
end.
2) самая короткая, но и сложная версия, т.к. используются специфичные преобразования и вообще всё ужато, не очень читаемо (будет работать только в PascalABC.NET. Я проверял в версии 3.4.2.1837).
begin
var a,b,n: integer;
a:=ReadInteger('Введите шестизначное натуральное число:');
repeat inc(n);
b:=min(max(a+(n div 2)*(1-n mod 2*2),100001),999999);
until b.ToString.Select((x,i)->x.ToDigit*(i<3?1:-1)).Sum=0;
print('Ближайшее счастливое число=',b);
end.
3) максимально простая, даже примитивная версия (тоже вроде должна работать везде). Единственное, что тут не совсем элементарно- это принудительный выход из цикла (команда break).
var
a,b,n,i,t,s: integer;
begin
write('Введите шестизначное натуральное число: ');
read(a);
for n:=0 to 1000 do
begin
t:=a+n;
if t>999999 then t:=999999;
b:=t;
s:=0;
for i:=1 to 6 do
begin
if i>3 then s:=s - t mod 10 else s:=s + t mod 10;
t:=t div 10;
end;
if s=0 then break;
t:=a-n;
if t<100001 then t:=100001;
b:=t;
s:=0;
for i:=1 to 6 do
begin
if i>3 then s:=s - t mod 10 else s:=s + t mod 10;
t:=t div 10;
end;
if s=0 then break;
end;
write('Ближайшее счастливое число: ',b);
end.
Примечания:
1) Вместо двух отдельных сумм по три цифры и их сравнения- тут я сделал общую сумму (но правые три цифры берутся со знаком минус) - в результате сумма должна быть равна нулю
2) Сделано приведение числа в диапазон шестизначных (т.е. можно ввести любое целое число, хоть отрицательное- и программа найдёт ближайшее к нему счастливое шестизначное положительное)
3) Диапазон шестизначных я начал с 100 001 потому, что это первое счастливое в этом диапазоне, число перед ним (100 000) нет смысла проверять
4) Поиск ближайшего счастливого одновременно идёт и вверх и вниз от введённого пользователем числа. В третьей версии это сделано двумя отдельными циклами (в первом к центральному числу прибавляется смещение, а во втором- отнимается). В первой и второй версии- цикл один, и знак смещения получается из младшего двоичного разряда переменной цикла (n), а сама величина смещения- из остальных двоичных разрядов переменной n.



Конечно, я могу помочь вам написать программу на языке программирования Pascal для решения этой задачи. Вот пример программы:
```pascal program HappyNumber;
var number, originalNumber, sum1, sum2, temp: integer;
begin // Вводим шестизначное число write('Введите шестизначное число: '); readln(number);
// Проверяем, является ли число шестизначным if (number < 100000) or (number > 999999) then begin writeln('Введенное число не является шестизначным.'); exit; end;
// Сохраняем оригинальное число originalNumber := number;
// Вычисляем суммы первых трех и последних трех цифр sum1 := (number div 100000) + ((number div 10000) mod 10) + ((number div 1000) mod 10); sum2 := ((number div 100) mod 10) + ((number div 10) mod 10) + (number mod 10);
// Проверяем, является ли число счастливым if sum1 = sum2 then writeln('Введенное число - счастливое!') else begin // Находим ближайшее счастливое число repeat Inc(number); temp := number; sum1 := (temp div 100000) + ((temp div 10000) mod 10) + ((temp div 1000) mod 10); sum2 := ((temp div 100) mod 10) + ((temp div 10) mod 10) + (temp mod 10); until sum1 = sum2;
writeln('Введенное число не счастливое. Ближайшее счастливое число: ', number); end;
readln; end. ```
Программа запрашивает у пользователя ввод шестизначного числа, затем проверяет, является ли оно счастливым, и выводит соответствующее сообщение. Если число не является счастливым, программа находит ближайшее счастливое число.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili