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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.333 из 5
Похожие ответы