Справка CPP программы голосования (неправильный вывод)

Во-первых, спасибо за внимание. Программа, которую я пытаюсь написать, должна делать следующее:

На выборах городского головы Великого Гуслару снялись M кандидатов, помеченных номерами от 1 до M. Каждый из N избирателей отдал важный голос за одного из них. Напишите программу, которая считывает описание голосов, а потом выдает результаты голосования и номер выбранного кандидата в мэры. Согласно избирательному закону Великого Гуслару, если два или более кандидата набрали одинаковое, наибольшее количество голосов, на выборах побеждает тот, у кого меньшее количество голосов.

Вход

Первая строка ввода содержит два целых числа M и N (1 ‹= M ‹= 10, 1 ‹= N ‹= 1000), определяющих подходящее количество кандидатов и количество поданных голосов. Во второй строке находятся N целых чисел от 1 до M. Это номера кандидатов, которым были отданы отдельные голоса.

Выйти

В первых M строках следует вывести в порядке очереди количество голосов, набранных кандидатами с номерами от 1 до M, в формате «X:Y», где X — номер кандидата, а Y — количество голосов. бросили на это. Затем отдельной строкой должен быть указан номер кандидата, победившего на выборах.

Пример

Вход:
3 10
1 3 2 1 2 3 3 3 2 2

Выход:
1: 2
2: 4
3: 4

Сейчас у меня есть код:

#include <iostream>

using namespace std;

int main()
{
int c,v,tab[100],sum,p;
sum=0;
cin>>c>>v;
for(p=1;p<=v;p++)
       cin>>tab[p];

for(int i=1;i<=c;i++){

       if (i==tab[p]){
           sum+=tab[p]+1;
        }
cout<<i<<": ";
cout<<sum<<endl;
}
return 0;

}

Мой вывод выглядит следующим образом:

1: 0
2: 0
3: 0

До сих пор я понял, что все, что он делает, это берет и выводит сумму. Любые советы или советы? Спасибо.


person Stephan    schedule 11.11.2016    source источник
comment
Справка CPP по программе голосования (неправильный результат) — это может объяснить Дональда Трампа   -  person Ed Heal    schedule 12.11.2016
comment
... И Brexit тоже   -  person Ed Heal    schedule 12.11.2016
comment
Вы сравниваете с tab[p]. Подумайте, каково значение p после первого цикла.   -  person molbdnilo    schedule 12.11.2016


Ответы (1)


Отказ от ответственности Я не тестировал это

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

#include <iostream>
using namespace std; 

int main() 
{ 

Инициализируйте переменные в отдельной строке и дайте им информативные имена.

   int candidateAmount;
   int voteAmount;

   cin >> candidateAmount
       >> voteAmount;

В С++ массивы отсчитываются от нуля. Таким образом, массив из 100 элементов будет работать с индексом от 0 до 99.

   int votes[voteAmount];
   int votesPerCandidate[candidateAmount];
   for (int voteCount = 0; voteCount < voteAmount; ++voteCount) 
   {
     int currentVote = 0;
     cin >> currentVote; 
     votes[voteCount] = currentVote;
     ++votesPerCandidate[currentVote];
   } 


   for (int candidateCount = 0; candidateCount < candidateAmount ; ++candidateCount)
    { 
       cout << candidateCount + 1 << ": " 
       votesPerCandidate[candidateCount] << endl;
    } 
    return 0; 
}
person pvl    schedule 11.11.2016
comment
Спасибо за ваше объяснение, которое помогло мне решить эту задачу. Также спасибо за совет по поводу названия и стиля, ценю! - person Stephan; 12.11.2016