zoukankan      html  css  js  c++  java
  • 选民投票

    个人观点,如有不同见解,欢迎在评论区留言

    题目:

    编程统计候选人的得票数。有若干位候选人(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<<"
    invalid vote:
    ";
    		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]!=''||b[i]!=''; i++) {
    		if(a[i]!=b[i]&&a[i]!=b[i]+32&&a[i]!=b[i]-32) {
    			return 0;
    		}
    	}
    	return 1;
    }
    
    
  • 相关阅读:
    System.BadImageFormatException: 未能加载文件或程序集""或它的某一个依赖项。试图加载格式不正确的程序。
    Win10中解决SYSTEM权限获取,删Windows old
    Jenkins配置MSBuild编译.net4.6的项目
    TeamViewer11的安全设置
    Jenkins配置的邮件无法发送的问题
    Jenkins 2.x版本修改启动端口号(Windows)
    Jenkins 2.x版本的安装步骤(Windows)
    CruiseControl.NET/CCNET安装包下载
    Jenkins+CCNET的另类部署图
    VisualSVN Server和Subversion的联系
  • 原文地址:https://www.cnblogs.com/pluie/p/12810036.html
Copyright © 2011-2022 走看看