接力赛是两个或两个以上参赛队的比赛。一个队的每一个成员都跑一段比赛。你的任务是帮助评估接力赛的结果。
你必须处理好几个团队。对于每一支队伍,你都会得到一份列表,上面列出了比赛的每一部分的跑步时间。你要计算整个距离内每公里的平均时间。这很简单,不是吗?
所以如果你喜欢这个比赛的乐趣和挑战,也许你也喜欢接力赛。来自乌尔姆的学生参加了例如在瑞士苏黎世举行的“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.