hdu2093(字符串处理,EOF的输入是control键+z再按回车(windows系统))

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2093
在这里插入图片描述在这里插入图片描述题目大意:

就是算出对应的排名,输出按照降序的方式。先比较ac的题目数,多的先输出,然后再是,比较罚时,少的输出,最后如果都一样,比较名字的字典顺序。罚时的算法为:罚时=正数+括号里的数字*单位罚分数;

细节

我是真的菜,翻了整个一整页没有一个大神说出这一点。就是写完之后测试数据的时候,需要输入EOF,然而我不知怎么输入,一直以为是自己的程序错了,然后就无从下手。最后还是去查了下:EOF的输入在windows系统下,是control键+z再加回车就是相当于是EOF。如果不加EOF的话,这个cmd窗口就不会输出结果的。

AC代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>

using namespace std;

struct player{
	char name[15];
	int acnum;
	int score;
}pl[10000];

bool cmp(player x,player y){//用来指定排序顺序的函数 
	if(x.acnum!=y.acnum) return x.acnum>y.acnum;
	else if(x.score!=y.score) return x.score<y.score;
	else return strcmp(x.name,y.name)<0;//按照字母字典顺序来排序 
}

int main(){
	
//字符数组转整型 
//	char str[5]="1324";
//	int num = 0;
//	for(int i = 0;i<strlen(str);i++){
//		printf("str:%d\n",str[i]);
//		printf("0:%d\n",'0');
//		num =num*10+(str[i]-'0');
//		printf("%d\n",num);
//	}
	
	int n,m;
	scanf("%d%d",&n,&m);
	char str[200];
	int i=0;
	int error;//用来记算罚时的错题数 
	int num;//用来记录解题的时间
	while(scanf("%s",&pl[i].name)!=EOF){
		pl[i].acnum = 0;//初始化pl选手的数据值
		pl[i].score = 0;

		int k;
		for(int j = 0;j < n;j++){
			scanf("%s",&str);
			num = 0;
			error = 0;
			if(str[0]=='-')	continue;//如果为负数则直接跳到下一个操作 
			if(strcmp(str,"0") == 0) continue;

			for(k = 0;k<strlen(str);k++){
				if(str[k]=='('){
						break;
				}

				num = num*10+(str[k]-'0');//获取AC的时间 
			}
			
			
			if(k!=strlen(str)){//表示之前检测到了'(',所以要进行这个操作 
				for(k=k+1;k<strlen(str);k++){
					if(str[k]==')'){
						break;
					}
					error =error*10+(str[k]-'0');//获取ac后的计算错误题的提交次数 ,用于计算罚时
				}
			}
			pl[i].acnum ++;
			pl[i].score += (num+error*m); 
		}
		
		i++;
	}
	sort(pl,pl+i,cmp);
	for(int h = 0;h < i;h++){
		printf("%-10s%3d%5d\n",pl[h].name,pl[h].acnum,pl[h].score);
	}
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值