Top.Mail.Ru
Ответы

Задание 9 егэ. В чем я не прав? Питон.

Задача выглядит так:
Откройте файл электронной таблицы, содержащей в каждой строке пять натуральных чисел. Определите количество строк таблицы, в которых хотя бы три числа могут образовывать геометрическую прогрессию с отличным от единицы знаменателем прогрессии.
(вот ссылка на файл с сайта КЕГЭ https://kompege.ru/files/GRgpITGVJ.xlsx )
В ответе запишите только число.

Мой код:
schet = 0
for line in open('9.txt'):
a = [int(x) for x in line.split()]
np = [x for x in a if a.count(x) == 1]
np = sorted(np)
if len(np) >= 3:
for k in range(2,max(a)):
if np[0] * k in np:
if (np[0]* k) * k in np:
print(np)
schet += 1
print(schet)

Правильный ответ 56
Мой ответ 164
В чем я не прав?

Дополнен

использовал не тот файл, когда решал, но всё равно мое решение неправильное, не понимаю почему

По дате
По Рейтингу
Аватар пользователя
Новичок
2мес

Три натуральных числа, отсортированных по возрастанию/убыванию, образуют геометрическую прогрессию, если:

1
 np[0] * np[2] == np[1] * np[1] 

Если чисел 4, необходимо проверить все 3 комбинации 3 чисел из 4.
Если чисел 5, необходимо проверить все 6 комбинаций 3 чисел из 5.
Проще всего перебирать комбинации с помощью itertools.combinations.

1234567
 import itertools
schet = 0
for line in open('9.txt'):
    np = sorted(set(map(int, line.split())))
    if len(np) < 3: continue
    schet += any(map(lambda a: a[0] * a[2] == a[1] * a[1], itertools.combinations(np, 3)))
print(schet) 

Можешь сам убедиться, что при использовании содержимого твоего файла ответ - именно 56: https://onlinegdb.com/BuS-N62x6

Вариант без any:

12345678910
 import itertools
schet = 0
for line in open('9.txt'):
    np = sorted(set(map(int, line.split())))
    if len(np) < 3: continue
    for a in itertools.combinations(np, 3):
        if a[0] * a[2] == a[1] * a[1]:
            schet += 1
            break
print(schet) 
Аватар пользователя
Искусственный Интеллект
2мес

Смотри сюда.
Пусть дана строка
1 -1 1
Это геометрическая прогрессия с первым членом 1 и коэффициентом -1.
Которуй, ЧСХ, отличен от 1.
Но ты отрицательные коэффициенты почему-то не проверяешь совершенно.
И дробные тоже.
И 0 тоже отличен от 1, поэтому прогрессии вроде 3 0 0 ты тоже не найдешь.
И....

Аватар пользователя
Искусственный Интеллект
2мес

В вашем коде есть несколько существенных ошибок:

1. Вы проверяете только случай, когда первое число в отсортированном списке является началом прогрессии. Но прогрессия может начинаться с любого числа в списке.

2. Вы не учитываете случай, когда числа в прогрессии повторяются (например, 2, 2, 4).

3. Вы проверяете только случай, когда все три числа в прогрессии разные.

Вот исправленный вариант кода:

```python
schet = 0
for line in open('9.txt'):
a = [int(x) for x in line.split()]
np = sorted(a)

# Проверяем все возможные тройки чисел
for i in range(len(np)):
for j in range(i+1, len(np)):
for k in range(j+1, len(np)):
# Проверяем, является ли тройка чисел геометрической прогрессией
if np[j]**2 == np[i]*np[k] and np[j] != np[i]:
schet += 1
break

print(schet)
```

Основные изменения:
1. Убрали проверку уникальности чисел
2. Проверяем все возможные тройки чисел
3. Используем математическое условие геометрической прогрессии: b² = a*c
4. Добавляем проверку, что числа не равны (чтобы знаменатель ≠ 1)

Этот код должен дать правильный ответ 56.