 
ДАЮ 50 БАЛЛОВ!!! ПАСКАЛЬ Вводится шестизначное натуральное число. Проверить, является ли оно
счастливым (сумма первых трёх цифр равна сумме последних трёх цифр) и, если не является, вывести ближайшее счастливое число. 0
        0
         0
        0
    Ответы на вопрос
 
        Вот несколько версий такой программы (все ищут ближайшее счастливое число сразу и вверх и вниз):
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.
 0
                    0
                     0
                    0
                 
            Конечно, я могу помочь вам написать программу на языке программирования 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. ```
Программа запрашивает у пользователя ввод шестизначного числа, затем проверяет, является ли оно счастливым, и выводит соответствующее сообщение. Если число не является счастливым, программа находит ближайшее счастливое число.
 0
                    0
                     0
                    0
                Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
- 
			Математика 
- 
			Литература 
- 
			Алгебра 
- 
			Русский язык 
- 
			Геометрия 
- 
			Английский язык 
- 
			Химия 
- 
			Физика 
- 
			Биология 
- 
			Другие предметы 
- 
			История 
- 
			Обществознание 
- 
			Окружающий мир 
- 
			География 
- 
			Українська мова 
- 
			Информатика 
- 
			Українська література 
- 
			Қазақ тiлi 
- 
			Экономика 
- 
			Музыка 
- 
			Право 
- 
			Беларуская мова 
- 
			Французский язык 
- 
			Немецкий язык 
- 
			МХК 
- 
			ОБЖ 
- 
			Психология 
- 
			Физкультура и спорт 
- 
			Астрономия 
- 
			Кыргыз тили 
- 
			Оʻzbek tili 
 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			