Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/88: Рейтинг темы: голосов - 88, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.10.2018
Сообщений: 5
1

Python (Словари) Выборы в государственную думу

13.10.2018, 20:00. Показов 17131. Ответов 1

Author24 — интернет-сервис помощи студентам
Статья 83 закона “О выборах депутатов Государственной Думы Федерального Собрания Российской Федерации” определяет следующий алгоритм пропорционального распределения мест в парламенте.

Необходимо распределить 450 мест между партиями, участвовавших в выборах. Сначала подсчитывается сумма голосов избирателей, поданных за каждую партию и подсчитывается сумма голосов, поданных за все партии. Эта сумма делится на 450, получается величина, называемая “первое избирательное частное” (смысл первого избирательного частного - это количество голосов избирателей, которое необходимо набрать для получения одного места в парламенте).

Далее каждая партия получает столько мест в парламенте, чему равна целая часть от деления числа голосов за данную партию на первое избирательное частное.

Если после первого раунда распределения мест сумма количества мест, отданных партиям, меньше 450, то оставшиеся места передаются по одному партиям, в порядке убывания дробной части частного от деления числа голосов за данную партию на первое избирательное частное. Если же для двух партий эти дробные части равны, то преимущество отдается той партии, которая получила большее число голосов.

Формат ввода
На вход программе подается список партий, участвовавших в выборах. Каждая строка входного файла содержит название партии (строка, возможно, содержащая пробелы), затем, через пробел, количество голосов, полученных данной партией – число, не превосходящее 108.

Формат вывода
Программа должна вывести названия всех партий и количество голосов в парламенте, полученных данной партией. Названия необходимо выводить в том же порядке, в котором они шли во входных данных.


Ввод:
Party One 100000
Party Two 200000
Party Three 400000

Вывод:
Party One 64
Party Two 129
Party Three 257
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2018, 20:00
Ответы с готовыми решениями:

Выведите список партий, которые попадут в Государственную Думу
Здравствуйте, помогите пожалуйста решить задачу: В Государственную Думу Федерального Собрания...

Задание на тему словари и выборы
Как известно, в КШИ Раштрапати( президент) выбирается не прямым голосованием, а путем...

На выборах в Государственную думу в избирательные бюллетени внесено N партий
2)На выборах в Государственную думу в избирательные бюллетени внесено N партий. Электронный сканер...

Вывести номера всех партий, которые проходят в Государственную думу
Задача Выборы в Государственную думу На выборах в Государственную думу в избирательные бюллетени...

Вывести номера (в порядке их перечисления в бюллетене) всех партий, которые проходят в Государственную Думу
На выборах в Государственную думу в избирательные бюллетени внесено NN партий. Электронный сканер...

1
9 / 9 / 0
Регистрация: 15.11.2014
Сообщений: 17
12.04.2019, 19:48 2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
names = list()
votes = list()
sumVotes = 0
inFile = open('input.txt')
for line in inFile:
    line = line.split()
    partyName = ' '.join(line[:-1])
    partyVotes = int(line[-1])
    names.append(partyName)
    votes.append(partyVotes)
    sumVotes += partyVotes
inFile.close()
 
mandates = list()
fracPart = []
sumMandates = 0
for i in range(len(names)):
    partyMandates = (votes[i] * 450) / sumVotes
    sumMandates += int(partyMandates)
    mandates.append(int(partyMandates))
    fracPart.append(partyMandates - int(partyMandates))
 
# fracPart = enumerate(fracPart)
# , key=lambda x: (x[1], x[0]), reverse=True)
# print(mandates)
 
while sumMandates < 450:
    i = 0
    for j in range(1, len(fracPart)):
        if (
            (fracPart[j] > fracPart[i]) or  # если следующий остаток больше
            (fracPart[j] == fracPart[i] and votes[j] > votes[i])
                ):  # если пред и след остатки равны, но след голосов больше
            i = j
    mandates[i] += 1
    sumMandates += 1
    fracPart[i] = 0
 
for k in range(len(names)):
    print(names[k], mandates[k])
0
12.04.2019, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2019, 19:48
Помогаю со студенческими работами здесь

Выборы, выборы кандидаты PHP и Python?
Насиделся на паскале, не могу больше писать, что есть мочи изучаю на нем алгоритмизацию. Решил уйти...

Python. Словари
dict = {&quot;name&quot;: , &quot;time&quot;: } Как можно увеличить ключ name и time не вручную, а программно ? И...

Словари в Python
Здравствуйте. Помогите, пожалуйста, с задачей: 1. Надо реализовать фун-ию make_user, которая...

Словари Python
В список data вложено n словарей с двумя парами ключ-значение. Пример, где количество словарей n =...

Словари и файлы в Python
У меня есть файл такого типа: {u'darthlavigne': 2, u'777mrgrizzly777': 2, u'fasgh': 2, u'learde':...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru