2.1
Для всех натуральных чисел, от N до M (N < M) проверить условие, что разность любого натурального числа и суммы
его цифр кратна 9. Если это условие выполняется для всех чисел вывести на экран
слово YES, иначе слово NO.
Алгоритм
понятен: надо для каждого числа от N до M найти сумму цифр
(задача 2), найти разность исходного числа и этой суммы и проверить делимость
на 9. Но обычно в этой задаче начинающие программировать всегда делают одну и
ту же ошибку – для каждого числа, для которого выполняется требуемое условие,
они выводят слово YES. И если,
например, N=1000, а M=9999, программа выдаст 10000 слов YES. Дело в том, что в этой программе слово YES надо вывести один
раз только, когда все числа от N до M удовлетворяют
требуемому условию, и вывести слово NO, когда хотя бы один
раз требуемое условие не выполнилось бы, и после этого программа должна
закончит свою работу.
В нашей
программе оператор в строке 6 организует перебор всех чисел от N до M В строках 8 – 13
находим сумму цифр числа n1 (равному i ). В строке
14 делимости разности (i-s) на 9 и в случае, если эта разность не делится на
9, программа выводит слово NO и
заканчивает свою работу: оператор exit; И только, когда все числа будут
рассмотрены и ни разу условие не будет не выпонено, тогда после цикла for (строки 6 –
16) программа выдаст на экран слово YES.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Program A2_11;
Var
n,m,i,s,n1:integer;
begin
readln(n,m);
for i:=n to m do
begin
n1:=i; s:=0;
while(n1<>0) do
begin
s:=s + n1 mod 10;
n1:=n1 div 10;
end;
if ((i-s) mod 9<>0) then
begin writeln('NO'); exit; end;
end;
writeln('YES');
readln;
end.
|
// Program A2.11;
#include
<iostream>
using
namespace std;
int main()
{
int n,m,i,s,n1;
cin>>n>>m;
for(i=n; i<=m; i++)
{
n1=i; s=0;
while(n1)
{
s+=n1%10; // тоже,
что и s=s+n1%10;
n1/=10; //
тоже, что и n1=n1/10;
}
if((i-s)%9!=0){cout<<"NO\n"; return 0;}
}
cout<<"YES\n";
return 0;
}
|
|