Определить количество натуральных чисел, таких, что сумма любых трех подряд идущих цифр числа делится на 3 - PascalABC.NET
Формулировка задачи:
Определить, сколько существует натуральных k-значных (3<=k<=30) чисел, таких что сумма любых трех подряд идущих цифр числа делится на 3 без остатка.
Например:
Ввод: 3
Вывод: 300
Решение задачи: «Определить количество натуральных чисел, таких, что сумма любых трех подряд идущих цифр числа делится на 3»
textual
Листинг программы
type m=array[1..32] of integer; var n1,n2,d:m; k,i,j:integer; ok:boolean; procedure initmas(k:integer;var a:m); var i:integer; begin for i:=1 to 32 do a[i]:=0; if k<>0 then a[k]:=1; end; procedure sum(a,b:m;var c:m); var i:integer; begin for i:=1 to 31 do begin c[i]:=a[i]+b[i]; if c[i]>9 then begin a[i+1]:=a[i+1]+c[i] div 10; c[i]:=c[i] mod 10; end; end; end; function check(a:m;k:integer):boolean; var i:integer; begin i:=32; while a[i]=0 do if i>1 then dec(i); if i>k then check:=true else check:=false; end; procedure printm(a:m); var i:integer; begin i:=32; while a[i]=0 do if i>1 then dec(i); for i:=i downto 1 do write(a[i]); writeln; end; begin write('k=');readln(k); initmas(k,n1); initmas(1,n2); initmas(0,d); repeat i:=1; repeat j:=0;ok:=false; j:=j+n1[i]+n1[i+1]+n1[i+2]; if (j>0) and (j mod 3=0) then begin sum(d,n2,d);ok:=true;end; i:=i+1; until (i>k-2) or (ok); sum(n1,n2,n1); until check(n1,k); printm(d); readln; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д