var n,a,k,sum,i,j: integer; s: string; begin sum:=0; write ('Введите количество чисел: '); readln (n); for i:=1 to n do begin write ('Введите число: '); readln (a); Str(a,s); k:=0; for j:=1 to length(s) do if s[j]='5' then k:=k+1; if k=2 then sum:=sum+a; end; writeln ('Sum = ',sum); end.
2 вариант через div и mod
var n,a,x,k,sum,i: integer; begin sum:=0; write ('Введите количество чисел: '); readln (n); for i:=1 to n do begin write ('Введите число: '); readln (a); x:=abs(a); k:=0; while x>0 do begin if x mod 10 =5 then k:=k+1; x:=x div 10; end; if k=2 then sum:=sum+a; end; writeln ('Sum = ',sum); end.
пример результата:
Введите количество чисел: 3 Введите число: 550001 Введите число: -550000 Введите число: 123456 Sum = 1
// PascalABC.NET 3.2, сборка 1367 от 20.12.2016 // Внимание! Если программа не работает, обновите версию!
function NOK(a,b:integer):integer; begin if a=b then Result:=a else begin var c:=a*b; repeat if a>b then a:=a-b else b:=b-a; until a=b; Result:=c div a end end;
begin var n:=ReadInteger('N='); var L:=new List<integer>; var m:=n; while m>0 do begin var d:=m mod 10; L.Add(d); m:=m div 10 end; var a:=L.Where(x->x<>0).Distinct.ToArray; var k:=a[0]; if a.Length>1 then for var i:=1 to a.Length-1 do k:=NOK(k,a[i]); Range(k,n,k).Println; end.
Как это работает? Если число делится на каждое из нескольких чисел, то оно делится и на НОД этих чисел, Функция НОД позволяет найти НОД пары чисел, а её применение несколько раз позволит найти НОД для необходимого набора чисел. Создаем объект типа "список целых" и цифра за цифрой помещаем туда числа, совпадающие с цифрами заданного числа n. Затем просматриваем список и все уникальные элементы, за исключением нуля, заносим в массив а. Далее вычисляем НОД для всех элементов полученного массива. Понятно, что первым в последовательности искомых чисел будет стоять НОД, а далее пойдут числа, которые будут увеличиваться каждый раз на НОД, пока не достигнут n.
ответ: