OJ------记票统计

描述

请实现接口:

unsigned int  AddCandidate (char* pCandidateName); 功能:设置候选人姓名 输入: char* pCandidateName 候选人姓名 输出:无 返回:输入值非法返回0,已经添加过返回0 ,添加成功返回1

 

Void Vote(char* pCandidateName); 功能:投票 输入: char* pCandidateName 候选人姓名 输出:无 返回:无

unsigned int  GetVoteResult (char* pCandidateName);

功能:获取候选人的票数。如果传入为空指针,返回无效的票数,同时说明本次投票活动结束,释放资源 输入: char* pCandidateName 候选人姓名。当输入一个空指针时,返回无效的票数

输出:无 返回:该候选人获取的票数

 

void Clear()

// 功能:清除投票结果,释放所有资源 // 输入: // 输出:无 // 返回

 

知识点查找
运行时间限制10M
内存限制128
输入

输入候选人的人数,第二行输入候选人的名字,第三行输入投票人的人数,第四行输入投票。

输出

每行输出候选人的名字和得票数量。

样例输入4 A B C D 8 A B C D E F G H
样例输出A : 1 B : 1 C : 1 D : 1 Invalid : 4

答案需要考虑重名问题,第二个重名数量为0;且冒号前后存在空格;

我的方法感觉有点繁琐,不够简便

import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int sum=0;
Map<String,Integer> map=new HashMap<String,Integer>();

//while(sc.hasNext()){
int num1=sc.nextInt();

String[]ss= new String[num1];
for(int i=0;i<num1;i++){
    ss[i]=sc.next();
map.put(ss[i],sum);
map.put("Invalid",sum);
}
 int num2=sc.nextInt();
 String[]ss2=new String[num2];
 int k=0;
for(int i=0;i<num2;i++){
	ss2[i]=sc.next();
    for(int j=0;j<ss.length;j++){
    if(ss2[i].equals(ss[j])){
        map.put(ss[j],map.get(ss[j])+1);
        k=1;
        break;
    }else{k=0;}
    }
    
//    else{map.put("Invalid",map.get("Invalid")+1);}
//    }
if(k==0){map.put("Invalid",map.get("Invalid")+1);}

}
//也可以用Map.Entry进行遍历
for(int i=0;i<num1;i++){
	 System.out.println(ss[i]+":"+map.get(ss[i]));
	 }
	  System.out.println("Invalid:"+map.get("Invalid"));

}

}
Map.Entry()进行遍历-------不同之处:遍历到相同元素只输出一次
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int sum=0;
Map<String,Integer> map=new HashMap<String,Integer>();
int num1=sc.nextInt();
for(int i=0;i<num1;i++){
    String ss=sc.next();
map.put(ss,sum);
}
 int num2=sc.nextInt();
 int k=0;
for(int i=0;i<num2;i++){
	String s=sc.next();
	try{
map.put(s,map.get(s)+1);}
	catch(Exception e){
		map.put("Invalid",++k);	
}
}
for(Map.Entry i:map.entrySet()){
	System.out.println(i.getKey()+" : "+i.getValue());
	
}
}}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值