Q:

# C++ program Input list of candidates and find winner of the Election based on received votes

Construction of object for the problem...

For this very problem, we need to create a new object, candidate, which has members:

1. Last name

Thus define a class like following:

```class candidate{
//public member since we are not
public:
string name;
int vote;
};
```

Thus now a new type of object variable we will create that is candidate & the algorithm is based on the class definition.

Algorithm:

1. Create an array of 5 element of type candidate.
2. Input all the entry & assign them to the candidate array.
```Like for s be the input name & v be the no of
received vote for ith candidate, we assign it by-
Array[i].name=s; //members are assigned their values
Array[i].vote=v;
```
```For i=0:4
total_vote+= array[i].vote
End for loop
```
1. To calculate percentage vote received for each of the candidates, divide no of votes received by total_vote& make percentage. (Take care of integer division, result may reflect 0, if you change the order, first multiply with 100 or use floating calculation).
2. For figure out the winner
```Set max= INT_MIN, count=0;
for i=0:4
Find the max vote received by any candidate in the election
End for loop

For i=0:4
if no of received vote for i th candidate==max
Store i
Increase count // no of winner candidate

Print the name(s) of winner(s) using the stored indexes.```

### C++ implementation

``````#include <bits/stdc++.h>
using namespace std;

class candidate{
public:
string name;
int vote;
};

void outputElection(candidate* arr){
int total_vote=0;
for(int i=0;i<5;i++){
total_vote=total_vote+arr[i].vote;
}

cout<<"result of the election............."<<endl;
for(int i=0;i<5;i++){
cout<<arr[i].name<<"\t\t\t";
cout<<arr[i].vote<<"\t\t";
cout<<(arr[i].vote*100)/total_vote<<"%"<<endl;
}

int max=INT_MIN,count=0;
int index={0};

for(int i=0;i<5;i++){
if(arr[i].vote>max){
max=arr[i].vote;
}
}

for(int i=0;i<5;i++){
if(arr[i].vote==max){
index[count]=i;
count++;
}
}

if(count==1)
cout<<"The winner is "<<arr[index[count-1]].name<<endl;
else{
cout<<"There is tie between:"<<endl;
for(int i=0;i<count-1;i++)
cout<<arr[index[i]].name<<", ";
cout<<arr[index[count-1]].name<<endl;
cout<<"all are winner\n";
}
return ;
}

int main(){
string s;
int v;
candidate arr;
cout<<"enter candidates last name, there are five candidates\n";
for(int i=0;i<5;i++){
cout<<"enter candidate "<<i<<" last name\n";
cin>>s;
arr[i].name=s;
cin>>v;
arr[i].vote=v;
}
outputElection(arr);
return 0;
}``````

Output (first run):

```enter candidates last name, there are five candidates
enter candidate 0 last name
Peter
30
enter candidate 1 last name
Roy
20
enter candidate 2 last name
Ali
40
enter candidate 3 last name
Hales
60
enter candidate 4 last name
john
10
result of the election.............
name of candidate       vote received   percentage
Peter                   30              18%
Roy                     20              12%
Ali                     40              25%
Hales                   60              37%
john                    10              6%
The winner is Hales```

Output (second run):

```enter candidates last name, there are five candidates
enter candidate 0 last name
Morgan
25
enter candidate 1 last name
Wasim
15
enter candidate 2 last name
Stones
25
enter candidate 3 last name
Harris
15
enter candidate 4 last name
Enderson
20
result of the election.............
name of candidate       vote received   percentage
Morgan                  25              25%
Wasim                   15              15%
Stones                  25              25%
Harris                  15              15%
Enderson                20              20%
There is tie between:
Morgan, Stones
all are winner```