Дано натуральное число N. Вычислить разницу между самой большой и самой маленькой цифрой...

0 голосов
32 просмотров

Дано натуральное число N. Вычислить разницу между самой большой и самой маленькой цифрой в записи этого числа.


Информатика (32 баллов) | 32 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

// PascalABC.NET 3.1, сборка 1267 от 10.07.2016
begin
  var s:=ReadlnString('Натуральное число:').Distinct;
  Writeln('Макcимальная разница в цифрах: ',Integer(s.Max)-Integer(s.Min))
end.

Тестовое решение
Натуральное число: 3456634642452343053000523424136240235341
Макcимальная разница в цифрах: 6

(142k баллов)
0

begin
var digits := ReadInteger('n =').ToString().ToCharArray()
.Where(c -> c.IsDigit())
.Select(c -> StrToInt(c.ToString()));
// PrintLn(digits);
WriteLn(digits.Max - digits.Min);
end.

0

Что-то мне подсказывает, что Ваше решение сложнее и длиннее. И ограничено числами в 16.1 млн.

0

а ваше решение вообще никак не работает со случайными ошибками)

0

Напоминаю одно из базовых правил Сервиса: задание не должно тестировать входные данные, если это не оговорено условиями задания.

0

Кстати, это же правило действует в заданиях олимпиад, ЕГЭ, ГИА.

0

это даже правило... буду знать

0

Да, чтобы не превращать программы в монстров поверками типов, диапазонов и т.д.

0

Представляете, сказано, что нужно найти корень уравнения на отрезке a,b, указано, что [a;b] - интервал изоляции корня, а мы начинаем требовать от автора решения проверки, так ли это?

0

жалко не поделиться, раз уже решила

0 голосов

Var n,ni,ma,mi,i:int64;
    nstr:string;
begin
ma:=0;
mi:=10;
read(n);
nstr:=inttostr(n);
for i:=1 to length(nstr) do begin
   ni:=strtoint(nstr[i]);
   if ni>ma then ma:=ni;
   if ni   end;
writeln(ma-mi);
end.

(1.5k баллов)
0

Неправда Ваша. Только что вбил Ваш код с заменой на max/min в PascalABC.NET 3.1, сборка 1267 от 10.07.2016 - компиляция идет без ошибок

0

это классическое решение данной задачи

0

var
n: longint;
t, max, min: byte;

begin
readln(n);
max := n mod 10;
min := max;

while n > 0 do
begin
t := n mod 10;
if t > max then max := t;
if t < min then min := t;
n := n div 10;
end;

writeln(max - min);
end.

0

Это язык какой? Free Pascal?

0

Нельзя писать max и min. Ругается))) Думает, это функция

0

ma вместо max, mi вместо min. И вообще такие задачи класически через mod и div делаются

0

PascalABC NET

0

если нет конечно повышенных требований на длину числа

0

Ну и ладно. Возможно, я ошибся. Просто на другой версии Паскаля, на которой раньше я учился, частенько выскакивала такая ошибка, при каких то других действиях. Я уже подпривык ставить так

0

ABC.NET даже на кириллице идентификаторы позволяет писать, а еще есть экранирующий символ для имен, совпадающих с зарезервированными словами)))