![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Gambit |
![]()
Сообщение
#1
|
Гость ![]() |
СРОЧНО Нужна помощь в решении задачи:
Дано натур. число 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. Сообщение отредактировано: Gambit - 24.06.2005 19:08 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Gambit,
Ты по-моему не до конца понял условие задачи... Твоя программа должна просто запрашивать число N, и подсчитывать, сколько чисел из интервала [10000000 .. 99999999] имеют сумму цифр меньше, чем N... Никаких 8-значных чисел тебе вводить не нужно... |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Кстати, как ни странно, тупой перебор (с некоторым ограничением) дает результат за вполне приемлемое время, измеряемое секундами (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 |
![]()
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Вот эта задача в моём понимании выглядит так:
{
Дано натур. число 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-минуты и пару секунд. -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 23:59 |