Форум » Обработка целых чисел » 25.5663 (PRO100 ЕГЭ) - другой ответ? » Ответить

25.5663 (PRO100 ЕГЭ) - другой ответ?

ivackov.sergey: Написал программу, однако совпал только 1-й ответ? [pre2] ## uses school; function f(x: integer): boolean; begin var (i1,i2) := (x.Digits.IndexOf(1)+1,0); //позиция первой 1 (+1 для строк) var s:=x.ToString; for var i:=1 to s.Length - 1 do if s[i:i+2]='68' then i2:=i; if (i2-i1 >=3) and (i1>0) then Result:=true; end; var (x,c):=(1000,0); while x<=17000000 do begin if f(x) and x.divs(161) then begin c+=1; if (c mod 500 = 1) then println(x,x div 161); //println(c,x,x div 161); end; x+=1; end; [/pre2] { Ответ: 14168 88 10658683 66203 12668285 78685 14702681 91321 16738687 103967 }

Ответов - 3

Поляков: Спасибо, ответ исправлен.

Елена_10: Здравствуйте ! Вопрос по тому же заданию 5663. {#Среди натуральных чисел, не превышающих 17*10^6, найдите все числа, #соответствующие маске *1?*?68*, делящиеся на 161 без остатка #вывести каждое пятисотое число, начиная с первого, в порядке возрастания (1-е, 501-е, 1001-е....) k=0 for i in range(161,17000001,161): x=str(i) in1= x.find('1') in68=x.find('68',3) if 0<=in1<=4 and (in68-in1)>=2 and i % 161==0: k+=1 if k==1 or (k % 500)==1: print("Число ",i, ' Частное ',i//161) print("k= ",k) } Получаю ответы: Число 14168 Частное 88 Число 10068296 Частное 62536 Число 12088685 Частное 75085 Число 14106820 Частное 87620 Число 16146368 Частное 100288 Не пойму что не так?

СветланаВ: У вас программа не ловит числа, в которых 68 входит дважды. Например 1268680. Нужно использовать rfind - искать последнее вхождение 68 в стороку. И разница 68-го и 1-го должна быть>=3




полная версия страницы