模拟 超大型 LED 显示屏

题目描述
你是学生会体育部长 , 负责组织一年一度的校篮球比赛 。马上就要决赛了 , 你希望吸引更多的 人来看比赛 , 因此打算更新一下设备 , 用一个超大的 LED屏幕来显示比分 。当然 , 电也不是 不要钱的 , 所以你决定先分析一下往年的比赛 , 估计一下大概要耗多少电 。
【模拟超大型 LED 显示屏】如上图 , 每个数字由 7条线段组成 , 每条亮着的线段每秒钟耗电量为 1个单位 。线段不亮的时 候不耗电 。为了省电 , 比分不显示前导 0(不过 0分的时候要显示数字 0) 。
你的 LED显示屏共包含 6个数字 , 即双方的比分各有 3 位数 。
输入
输入包含不超过 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秒钟 。
输出
对于每组数据 , 输出测试点编号和总耗电量 。
样例输入
START 09:00:00SCORE 09:01:05 home 2SCORE 09:10:07 guest 3END 09:15:00START 09:00:00SCORE 10:00:00 home 1SCORE 11:00:00 home 1SCORE 12:00:00 home 1SCORE 13:00:00 home 1SCORE 14:00:00 home 1SCORE 15:00:00 home 1SCORE 16:00:00 home 1SCORE 17:00:00 home 1SCORE 18:00:00 home 1SCORE 19:00:00 home 1SCORE 20:00:00 home 1END 21:00:00

模拟  超大型 LED 显示屏

文章插图
样例输出
Case 1: 9672Case 2: 478800
题目分析:
这是一个较为复杂的模拟题
#include using namespace std;int a[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; //记录每个数字需要亮着的线段数int get(int x){ //利用一个函数来巧妙地计算分数所对应的线条数int ans = 0;if (x == 0)return 6;while (x){ans += a[x % 10];x /= 10;}return ans;}int main(){int a, b, c, aa, bb, cc, cnt = 0;char s1[30], s2[30], s3[30];while (~scanf("%s %d:%d:%d", s1, &a, &b, &c)){int v1 = 0, v2 = 0, v, ans = 0;//ans是总的耗电量 , v1是主场分数 , v2是客场分数while (true){//不断地输入直到遇到END为止scanf("%s %d:%d:%d", s2, &aa, &bb, &cc);ans += (get(v1) + get(v2)) * ((aa - a) * 3600 + (bb - b) * 60 + (cc - c));//我们要记录更新分数后与更新分数前所消耗的电量if (s2[0] == 'E')break;scanf("%s %d", s3, &v);if (s3[0] == 'h')v1 += v;//更新主场分数elsev2 += v;//更新客场分数a = aa, b = bb, c = cc;}printf("Case %d: %d\n", ++cnt, ans);}return 0;}
生活很难 , 还是会继续 , 但它不妨碍我们追逐晚霞吹一吹风 , 耳机里还可以继续放喜欢的音乐 , 美好的景色依然存在 , 大步向前吧 , 好的东西永远在那里等你