CSU1507 超大型LED显示屏_模拟题

Description

你是学生会体育部长,负责组织一年一度的校篮球比赛。马上就要决赛了,你希望吸引更多的
人来看比赛,因此打算更新一下设备,用一个超大的 LED 屏幕来显示比分。当然,电也不是
不要钱的,所以你决定先分析一下往年的比赛,估计一下大概要耗多少电。


如上图,每个数字由 7 条线段组成,每条亮着的线段每秒钟耗电量为 1 个单位。线段不亮的时
候不耗电。为了省电,比分不显示前导 0(不过 0 分的时候要显示数字 0)。
你的 LED 显示屏共包含 6 个数字,即双方的比分各有 3 位数。

Input

输入包含不超过 100 组数据。每组数据第一行为"START hh:mm:ss",表示比赛开始时刻为
hh:mm:ss。最后一行为"END hh:mm:ss",即比赛结束时刻。二者之间至少会有一个 SCORE 信
息,格式为"SCORE hh:mm:ss team score",其中 team 要么是"home"(主场)要么是"guest"(客
场), score 表示得分,为 1,2 或者 3。这些信息保证按照时间从早到晚的顺序排列,且任意两
条 SCORE 信息的时刻均不相同。比赛开始时间不会早于 9:00,结束时间不会晚于同一天的
21:00。注意,如果比赛开始时间为 09:00:00,结束时间为 09:00:01,比赛长度为 1 秒钟,而不
是 2 秒钟。

Output

分析:

模拟题。每次按字符串读入一行,计算得分和分数花费的电量。详见代码注释。思路参考了大佬的。

ac代码

#include<stdio.h>
int SS(char c[])  //把时间换算成s秒 
{
    int h, m, s;//小时分钟秒 

    if(c[0] == 'S')
    {
        h = 3600 * (10 * (c[6] - '0') + (c[7] - '0'));
        m = 60 * (10 * (c[9] - '0') + (c[10] - '0'));
        s = 10 * (c[12] - '0') + (c[13] - '0');
    }
    else if(c[0] == 'E')
    {
        h = 3600 * (10 * (c[4] - '0') + (c[5] - '0'));
        m = 60 * (10 * (c[7] - '0') + (c[8] - '0'));
        s = 10 * (c[10] - '0') + (c[11] - '0');
    }
    return h + m + s;
}

//计算当前home或者guest耗电量,home得分guest耗电量不变,guest得分home耗电量不变
int countccc(int homeguest, char c[], int le[])
{
    int hgc;

    if(homeguest <= 9)  //个位数
    {
        for(int i= 0; i < 10; i++)
            if(homeguest == i)
                {
                    hgc = le[i];
                    break;
                }
    }
    else if(homeguest >= 10 && homeguest <= 99)  //两位数
    {
        int shang = homeguest / 10;
        int yushu = homeguest % 10;
        hgc = 0;

        for(int i = 0; i < 10; i++)
        {
            if(shang == i)
                hgc += le[i];
            if(yushu == i)
                hgc += le[i];
        }
    }
    else if(homeguest >= 100 && homeguest <= 999)  //三位数
    {
        int shan = homeguest / 100;
        int shiw = homeguest / 10 % 10;
        int gew = homeguest % 10;
        hgc = 0;

        for(int i = 0; i < 10; i++)
        {
            if(shan == i)
                hgc += le[i];
            if(shiw == i)
                hgc += le[i];
            if(gew == i)
                hgc += le[i];
        }
    }
    return hgc;
}

int main()
{
	int time1,time2,h,gu,hc,gc;
	int led[11] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};  //对应的耗电量
    char s[50];
    int num=0;//num计数测试样例的个数 
    int cost=0;//总费电 
    while(gets(s))
    {
    	if(s[0]=='S'&&s[1]=='T')  //如果开头是start 
    	{
    		time1=SS(s);//将开始时间换算成秒 
			h=0;     //此时home得分为0 
			gu=0;    //guest得分为0; 
			hc=6;    //home费电6 
			gc=6;   //guest费电6 
    	}
    	else if(s[0]=='E'&&s[1]=='N') //如果是结束时间 
    	{
    		num++;       
    		time2=SS(s);
    		cost+=(time2-time1)*(hc+gc);
    		printf("Case %d: %d\n",num,cost);//输出 
    		cost=0;////////记得输出完一组后更新cost=0!!!!错到了这里,wa! 
    	}
    	else 
    	{
		time2=SS(s);                //如果是中间刷新分的时间 
		cost+=(time2-time1)*(hc+gc);
        time1=time2;
    	if(s[15]=='h')          //如果home得分,guest不变 
    	{
    		h+=s[20]-'0';  //得分 
    		hc=countccc(h,s,led);
    	}
    	else                //如果guest得分,home不变 
    	{
    		gu+=s[21]-'0';//guest得分 
    		gc=countccc(gu,s,led); //更新了分数后guest电费 
    	}
       }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42079027/article/details/81259309