На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 1
ссылка на сообщение  Отправлено: 05.01.22 13:02. Заголовок: 6 задание (№ 4806)


Подскажите, чего я не вижу в диапазоне????
 
for i in range(1,355000000): 
x = i
n = 987
while (x+n)//1000 < 354261:
x = x - 5
n = n + 8

if (n//1000)==231:
print(i)



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]







Сообщение: 7
ссылка на сообщение  Отправлено: 05.01.22 13:42. Заголовок: Ygrek пишет: Подска..


Ygrek пишет:

 цитата:
Подскажите, чего я не вижу в диапазоне????


Нижней границы)) Поднимите ее

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 3
ссылка на сообщение  Отправлено: 05.01.22 15:34. Заголовок: Винникова пишет: Ни..


Винникова пишет:

 цитата:
Нижней границы)) Поднимите ее


Все равно не эффективно( Как ускорить?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 9
ссылка на сообщение  Отправлено: 05.01.22 16:35. Заголовок: Ygrek пишет: Как ус..


Ygrek пишет:

 цитата:
Как ускорить?


Рассчитать х и сдвигая границы определить диапазон.
Раньше, до КЕГЭ, так и делали, а в нынешних условиях задача стала очень простой, не требуется проводить анализ программы, вот и придумали изменить так, чтобы все-таки нужно было проанализировать, иначе по времени не проходит.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 4
ссылка на сообщение  Отправлено: 06.01.22 12:52. Заголовок: Винникова пишет: Ра..


Винникова пишет:

 цитата:
Рассчитать х и сдвигая границы определить диапазон.


Спасибо
 
k=0
for i in range(354173385,354173760):
x = i
n = 987
while (x+n)//1000 < 354261:
x = x - 5
n = n + 8
#print(i,x,n)
if (n//1000)==231:
k=k+1
print(k)



Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 09.01.22 20:29. Заголовок: Винникова, подскажит..


Винникова, подскажите, пожалуйста как вы нашли диапозон в этом задании.

Спасибо: 0 
Цитата Ответить





Сообщение: 25
ссылка на сообщение  Отправлено: 09.01.22 21:13. Заголовок: maryar пишет: подск..


maryar пишет:

 цитата:
подскажите, пожалуйста как вы нашли диапозон в этом задании.


Двигаемся с конца. Чтобы результат равнялся 231, n = 231 * 1000 = 231000
n = 987 + 8*k = 231000 (k -количество итераций, с шагом 8 меняется n)
k = 28752
x+n = 354261 * 1000
(x + n) + 3*28752 = 354261000 (шаг суммы x + n равен 3 (-5+8))
x + n = 354174744
x = 354174744 - 987 = 354173757
От этого числа двигаем границы в обе стороны, пока получаем результат.

Спасибо: 1 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 10.01.22 04:47. Заголовок: Огромное, спасибо...


Огромное, спасибо.

Спасибо: 0 
Цитата Ответить





Сообщение: 15
ссылка на сообщение  Отправлено: 11.01.22 13:41. Заголовок: Как вариант


Понимать алгоритм необходимо, но можно ограничиться приблизительным расчетом верхней границы, например, так:

 
cnt = 0
for i in range(354261000, 1, -1):
x = i
#x = int(input())
n = 987
while (x+n)//1000 < 354261:
if n//1000 < 228:
x = x - 500
n = n + 800
#elif n//1000 > 231: break
else:
x = x - 5
n = n + 8
if n // 1000 == 231:
cnt += 1
if n // 1000 > 231: break
print(cnt)


Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 29
ссылка на сообщение  Отправлено: 17.01.22 14:56. Заголовок: Спасибо, за решение,..


Спасибо, за решение, мне кажется оно наиболее простое и понятное.
В данном решении я бы поставила в условии
if n//1000 < 228:
условие
if n//1000 < 230:
т.к. 500+800=1300, а 1300 // 1000 = 1, т.е. шаг на 1, иногда на 2, поэтому меньше 230, а не меньше 231
кажется, что так логичнее объяснить что это за условие.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 11
ссылка на сообщение  Отправлено: 26.01.22 16:58. Заголовок: Уважаемые коллеги! О..


Уважаемые коллеги! Осмелюсь предложить такое решение, самая большая проблема – не могу его обосновать. Буду благодарен если вы его подтвердите или опровергнете.

Вводим следующие обозначения:
Nmin – минимальное значение n при котором программа печатает нужное число
Nmax - максимальное значение n при котором программа печатает нужное число
Kmax – количество циклов для получения Nmax из Ns
Kmin - количество циклов для получения Nmin из Ns
Ns – стартовое значение n из условия задачи
D – разница между увеличением n и уменьшением x
P – значение суммы n и x при котором прекращается выполнение цикла
Xmax – стартовое значение x при котором сумма Nmin и x равняется P
Xmin – стартовое значение x при котором сумма Nmax и x равняется P
Тогда получается следующее:
Минимальное значение х равно Xmin
Максимальное значение х равно Xmax + D – 1
Количество х равно (Kmax – Kmin + 1) * D

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 3241
ссылка на сообщение  Отправлено: 27.01.22 12:19. Заголовок: konyashkind пишет: X..


konyashkind пишет:
 цитата:
Xmax – стартовое значение x при котором сумма Nmin и x равняется P
Xmin – стартовое значение x при котором сумма Nmax и x равняется P

Это неверно, потому что мы идем с шагом D, поэтому остановка цикла может произойти при D различных значениях суммы x+n. Для данной задачи P может быть 354261000..354261002.
Вторая (наиболее важная) неточность в этой формуле - значение x вы берете ДО цикла, а Nmin и Nmax - ПОСЛЕ цикла. Получается непонятно что.
 цитата:
Количество х равно (Kmax – Kmin + 1) * D

Это, по-видимому, правильно. Для каждого конечного значения n есть D значений x, при которых сумма x+n находится внутри отрезка 354261000..354261002.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5894
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет