Вопрос задан 19.06.2023 в 10:30. Предмет Информатика. Спрашивает Найден Петя.

ДАЮ 50 БАЛЛОВ!!! ПАСКАЛЬ Вводится шестизначное натуральное число. Проверить, является ли оно

счастливым (сумма первых трёх цифр равна сумме последних трёх цифр) и, если не является, вывести ближайшее счастливое число.
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
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, я могу помочь вам написать программу на языке программирования 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

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос