HDU Average is not Fast Enough!( 水题大作战)

接力赛是两个或两个以上参赛队的比赛。一个队的每一个成员都跑一段比赛。你的任务是帮助评估接力赛的结果。              

你必须处理好几个团队。对于每一支队伍,你都会得到一份列表,上面列出了比赛的每一部分的跑步时间。你要计算整个距离内每公里的平均时间。这很简单,不是吗?              

所以如果你喜欢这个比赛的乐趣和挑战,也许你也喜欢接力赛。来自乌尔姆的学生参加了例如在瑞士苏黎世举行的“SOLA”接力赛。有关更多信息,请在比赛结束后访问http://www.sola.asvz.ethz.ch/。              

输入              

输入的第一行指定区段数n,后跟继电器总距离d(以千米为单位)。您可以安全地假设1<=n<=20和0.0<d<200.0。以下每一行都提供关于一个团队的信息:团队编号T(一个整数,在宽度为3的字段中右对齐)后面是每个部分的N个结果,用一个空格分隔。这些运行时间的格式为“h:mm:ss”,整数分别表示小时、分钟和秒。特殊情况下,跑步者被取消资格时,跑步时间以“—:—:—”表示。最后,每行的数据都以换行符结束。输入被EOF终止。              

 输出             

对于每个团队,只输出一行,使团队的数字t在宽度为3的字段中正确对齐,并且团队的平均时间以“m:s s”格式四舍五入为整秒。如果至少有一名参赛者被取消资格,则输出“—”。坚持样本输出以获得准确的表示格式。 

这道题目虽然题意简单,但是格式与输入的处理对我这个(弱菜)有点问题。直接上代码:

#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdio.h>
#include<string>
#include<string.h>
const int maxn=100005;
typedef long long ll;
using namespace std;
int main()
{
	int num;
	double d;
	cin>>num;
	scanf("%lf",&d);
	int hao;
	char h,m1,m2,s1,s2;
	double t;
	
	
	while(scanf("%d",&hao)!=EOF)
	{
		double sum=0;
		bool flag=false;
		for(int i=0;i<num;i++)
		{
			getchar();
			scanf("%c:%c%c:%c%c",&h,&m1,&m2,&s1,&s2);
			
			if(h=='-')
			{
				flag=true;
				continue;
			}
				
			sum+=(h-'0')*3600+((m1-'0')*10+(m2-'0'))*60+((s1-'0')*10+(s2-'0'));
		}
		t=sum/d;
		int t2=(int)(t+0.5);
		if(flag)
			printf("%3d: -\n",hao);
		else
			printf("%3d: %d:%02d min/km\n",hao,t2/60,t2%60);
	}
	return 0;
}

首先输入的格式先输入一个队伍编号,然后再输入时间(有符号为间隔),scanf,按分隔符输入字符(下面有判断,得是字符型数据),首先得有一个 getchar()来吸收空格,一个for 循环将每个人的时间字符串中的数据输入进来。

for(int i=0;i<num;i++)
	{
		getchar();
		scanf("%c:%c%c:%c%c",&h,&m1,&m2,&s1,&s2);

四舍五入,就是加上0.5 再取整。

int t2=(int)(t+0.5);

输出格式,几位对其,%3d.       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值