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; } |