杭电1861(坑)

神坑之题啊啊啊啊啊啊啊啊啊啊啊!!!!!错4发!~!~!~
经验之谈:数据一定找各种测试,多测试几组防止WA,第一次输入0时要测试;可用输出法看是否进入循环、循环几次等。
此题没什么技巧,把数据输入存进结构体num[i]数组,求当天时间(小时*60+分钟)。用嵌套循环,一个for (i)循环外记录判断S,一个for (j) 循环判断基础E,如果 [i] [j] 船号相等而且一个E一个S,用时间相减并且标记
num[i].ch为1,如果ch正确,就代表该i的船号借出归还正确,就可以加上这段时间,并且总借船量+1,求总时间除以总借船量。
首先要注意平均值结果四舍五入 : y=(int)(x+0.5)>(int)x?(int)x+1:(int)x
其次注意分母为零时!应另外分开输出;

给出一组测试数据:
1 S 08:00
1 E 09:00
1 S 10:00
1 E 11:00
1 S 11:00
1 E 12:00
0 E 17:00

#include<stdio.h>
struct node
{
    int count;
    int n;
    int t1;
    int t2;
    int t;
    char k;
    int ch;
}num[10005]={0,0,0,0,0,0,};
int main()
{
    while(~scanf("%d",&num[0].n)&&num[0].n!=-1)
    {
        scanf(" %c %d:%d",&num[0].k,&num[0].t1,&num[0].t2);
        num[0].count=0;
        int mark=0;
        int sum_1=0;
        double sum_2=0.0;
        num[0].t=num[0].t1*60+num[0].t2;
        if(num[0].n==0)
        {
            printf("0 0\n");
            continue;
        }
        for(int i=1; ; i++ )
        {
            scanf("%d %c %d:%d",&num[i].n,&num[i].k,&num[i].t1,&num[i].t2);
            num[i].t=num[i].t1*60+num[i].t2;
            num[i].count=0;
            num[i].ch=0;
            if(num[i].n==0)
            {
                mark=i;
                break;
            }
        }
        for(int i=0;i<mark;i++ )
        {
            for(int j=i+1;  j<mark;j++)
            {
                if(num[i].n==num[j].n&&num[i].k=='S'&&num[j].k=='E')
                {
                    num[i].count=num[j].t-num[i].t;
                    j=mark;
                    num[i].ch=1;
                }
            }
            if(num[i].ch&&num[i].k=='S'&&num[i].n!=0)
            {
                sum_2=num[i].count*1.0+sum_2;
                ++sum_1;
            }
        }
        if(sum_1==0)
        {
             printf("0 0\n");
             continue;
        }
        sum_2=sum_2/sum_1;
        sum_2=(int)(sum_2+0.5)>(int)sum_2?(int)sum_2+1:(int)sum_2;
        printf("%d %d\n",sum_1,(int)sum_2);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值