Автор | Сообщение |
|
Отправлено: 05.10.22 16:07. Заголовок: 25.5663 (PRO100 ЕГЭ) - другой ответ?
Написал программу, однако совпал только 1-й ответ? ## 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; { Ответ: 14168 88 10658683 66203 12668285 78685 14702681 91321 16738687 103967 }
|
|
|
Ответов - 3
[только новые]
|
|
|
| Администратор
|
Сообщение: 3724
|
|
Отправлено: 05.10.22 18:26. Заголовок: Спасибо, ответ испра..
Спасибо, ответ исправлен.
|
|
|
|
Отправлено: 01.11.22 11:33. Заголовок: 25 Задание № 5663
Здравствуйте ! Вопрос по тому же заданию 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 Не пойму что не так?
|
|
|
|
Отправлено: 16.04.23 13:24. Заголовок: У вас программа не л..
У вас программа не ловит числа, в которых 68 входит дважды. Например 1268680. Нужно использовать rfind - искать последнее вхождение 68 в стороку. И разница 68-го и 1-го должна быть>=3
|
|
|
|