Помощь - Поиск - Пользователи - Календарь
Полная версия: Целочисленная арифметика (задача)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Gambit
СРОЧНО Нужна помощь в решении задачи:
Дано натур. число N. Определить кол-во 8 значных чисел, у которых сумма цифр в цифровой записи числа меньше, чем N. Если таких чисел нет, выводим НЕТ.

Тут мой вариант, только считается как то странно и вводить можно любые числа, а не только 8 значные.

Код
program pro;
uses crt;
var x:array[1..8]of integer;
i,n,m,sum,s:integer;
begin
write('Вводим M для сравнения');
readln(m);
write('Ввод n: ');
readln(n);
write('Ввод 8 значных чисел');
for i:=1 to n do
begin
readln(x[i]);
sum:=sum+x[i];
end;
if sum<m then
begin
s:=s+1;
writeln('Таких чисел: ',sum);
end
else
writeln('Нет таких чисел');
readkey;
end.
volvo
Gambit,
Ты по-моему не до конца понял условие задачи...
Твоя программа должна просто запрашивать число N, и подсчитывать, сколько чисел из интервала
[10000000 .. 99999999] имеют сумму цифр меньше, чем N... Никаких 8-значных чисел тебе вводить не нужно...
volvo
Кстати, как ни странно, тупой перебор (с некоторым ограничением) дает результат за вполне приемлемое время, измеряемое секундами (3.3 секунды при N = 44):
program pro;
uses crt;

var
  n: integer;
  i1, i2, i3, i4, i5, i6, i7, i8: byte;
  count: longint;
begin
  write('n = '); readln(n);
  count := 0;
  if (n > 0) or (n < 9*8) then begin
    for i1 := 1 to 9 do if i1 < n then
      for i2 := 0 to 9 do if (i1+i2) < n then
        for i3 := 0 to 9 do if (i1+i2+i3) < n then
          for i4 := 0 to 9 do if (i1+i2+i3+i4) < n then
            for i5 := 1 to 9 do if (i1+i2+i3+i4+i5) < n then
              for i6 := 0 to 9 do if (i1+i2+i3+i4+i5+i6) < n then
                for i7 := 0 to 9 do if (i1+i2+i3+i4+i5+i6+i7) < n then
                  for i8 := 0 to 9 do
                    if (i1+i2+i3+i4+i5+i6+i7+i8) < n
                    then inc(count);
  end;
  if count = 0 then writeln('none')
  else writeln('count = ', count);
end.
Romtek
Вот эта задача в моём понимании выглядит так:
{
Дано натур. число N. Определить кол-во 8 значных чисел,
у которых сумма цифр в цифровой записи числа меньше, чем N.
Если таких чисел нет, выводим НЕТ.
}

program _8digits;

function SumOfDigits (x: longint): integer;
var
  rem, { остаток }
  sum: integer;
begin
	sum := 0;
	While X <> 0 Do
	Begin
		rem := X Mod 10; { остаток от деления на 10, т.е последняя цифра числа }
		inc (sum, rem);
		X:=X Div 10;
	End;
	SumOfDigits := sum;
end;

var
  n, count: integer;
  i : longint;

begin
  write ('Enter 1 <= n <= 72 : '); readln (n);
  count := 0;

  for i := 10000000 to 99999999 do
  begin
        if i mod 10000 = 0 then
           writeln (i);
	if SumOfDigits (i) < N then
		inc(count);
  end;
  
  if count = 0 then 
	writeln('none')
  else
	writeln('count = ', count);
  readln;
end.


В Turbo Pascal 7.0 я не долждался получения результата, прождав пару минут где-то на итерации числа 22400000.
Зато во Free Pascal 2.0.0 я получил результат в течение 1-минуты и пару секунд.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.