Определить количество натуральных чисел, таких, что сумма любых трех подряд идущих цифр числа делится на 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д