Определить сколько из предложенных чисел делятся на 7

Ася74

Разбираю прошлогодние задания Олимпиады по информатике. Прошу помочь решить следующую задачу.Однажды Витя Делилкин встретился с такой задачей: ему следовало определить какие из предложенных целых положительных чисел делятся без остатка на семь. Чисел было много, числа были большие… Витя Делилкин сразу принялся за дело. Взял много листов бумаги и принялся делить столбиком. Давайте поможем Вите решить его задачу быстрее. Посмотрим, что говориться в Википедии по поводу признаков делимости на 7. … Для того, чтобы натуральное число делилось на 7 необходимо и достаточно, чтобы алгебраическая сумма чисел, образующих нечётные группы по три цифры (начиная с единиц) взятых со знаком «+» и чётных со знаком «-» делилась на семь (например, число 689255. Первая группа со знаком «+» (255), вторая со знаком «-» (689). Отсюда 255 + (-689) = −434. В свою очередь 434 : 7 = 62). … Напишите программу, определяющую, сколько из предложенных чисел делятся без остатка на 7.Формат входных данных:Входной текстовый файл c.in содержит в первой строке число N - количество чисел, подлежащих проверке; 0
1 ответ

Ася74

uses crt;
var f1,f2: text;
    stroka: string;
    i,n,k: integer;
    
function STI (str: string; ng: integer) : integer;
var c,k: integer;
begin
val(str,c,k);
if odd(ng) then STI:=c else STI:=c*(-1);
end;
 
function SumS (sss: string): integer;
var s,nn: integer;  ss: string;
begin
nn:=0;
while length(sss)>=1 do
      begin
      inc(nn);
      if length(sss)>3 then
         begin
         ss:=copy(sss,length(sss)-2,3);
         delete(sss,length(sss)-2,3);
         end else
             begin
             ss:=sss;
             sss:='';
             end;
      inc(s,STI (ss,nn));
      end;
SumS:=s;
end;
 
begin
assign(f1,'c.in');
assign(f2,'c.txt');
reset(f1);
readln(f1,n);
for i:=1 to n do
    begin
    readln(f1,stroka);
    if SumS(stroka) mod 7=0 then inc(k);
    end;
close(f1);
rewrite(f2);
writeln(f2,k);
close(f2);
end.