選民投票


個人觀點,如有不同見解,歡迎在評論區留言

題目:

編程統計候選人的得票數。有若干位候選人(n<=10),候選人姓名從鍵盤輸入(候選人姓名不區分大小寫,姓名最長為9個字節),若干位選民,選民每次輸入一個得票的候選人的名字(姓名最長為9個字節),若選民輸錯候選人姓名,則按廢票處理。程序自動統計各候選人的得票結果,並按照得票數由高到低的順序排序。最后輸出各選票人得票結果和廢票信息。

輸入格式:

先輸入候選人人數n和n名候選人姓名,再輸入選民人數m和m位選民的選票。

輸出格式:

先根據選票結果由高到低輸出各候選人得票結果,再根據廢票情況輸出廢票信息(換行后,輸出提示信息“invalid vote:”,再輸出廢票信息)。

輸入樣例1:

3
zhang
li
wang
9
Wang
Zhang
zhuang
LI
Liao
ZHANG
WANG
Wang
wang
 

輸出樣例1:

wang:4
zhang:2
li:1
invalid vote:
zhuang
Liao
 

輸入樣例2:

2
liu
yang
5
Liu
liu
YANG
yang
Liu
 

輸出樣例2:

liu:3
yang:2
 

代碼:

#include<iostream>
#include<cstring>
using namespace std;
int strcmp1(char *a,char *b);
struct Node {
	char a[10];
	int num=0;
};
int main() {
	int n,m;
	cin>>n;
	Node voted[n];
	for(int i=0; i<n; i++)
		cin>>voted[i].a;
	cin>>m;
	Node voter[m];
	for(int i=0; i<m; i++)
		cin>>voter[i].a;
	for(int i=0; i<m; i++) {                 //選票與候選人匹配,若為無效選票,num=-1 
		int flag=0;
		for(int j=0; j<n; j++) {
			if(strcmp1(voted[j].a,voter[i].a)) {
				voted[j].num++;
				flag=1;
				break;
			}
		}
		if(!flag)
			voter[i].num=-1;
	}
	int select[n];
	for(int i=0; i<n; i++)
		select[i]=i;
	for(int i=0; i<n; i++) {                //對候選人得票數排序,直接排序同時交換字符串和數字,
		for(int j=0; j<n-1; j++) {          //比較麻煩,所以借助另一個數組實現
			if(voted[select[j]].num<voted[select[j+1]].num) {
				int temp=select[j];
				select[j]=select[j+1];
				select[j+1]=temp;
			}
		}
	}
	int sum=0;
	for(int i=0; i<n; i++) {
		cout<<voted[select[i]].a<<":"<<voted[select[i]].num<<endl;
		sum+=voted[i].num;
	}
	if(sum!=m) {                   //判斷是否有無效選票 
		cout<<"\ninvalid vote:\n";
		for(int i=0; i<m; i++) {
			if(voter[i].num==-1)
				cout<<voter[i].a<<endl;
		}
	}
}
int strcmp1(char *a,char *b) {               //判斷選票上名字是否與候選人名字一樣,是返回1,否返回0
	for(int i=0; a[i]!='\0'||b[i]!='\0'; i++) {
		if(a[i]!=b[i]&&a[i]!=b[i]+32&&a[i]!=b[i]-32) {
			return 0;
		}
	}
	return 1;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM