ZOJ 1122 Clock

来源:互联网 发布:数控加工工艺编程实例 编辑:程序博客网 时间:2024/06/06 09:31

题目大意:

        现要求计算一段时间内分针划过时针的次数。

        每行输入一个起始时间和终止时间(比如3 40 7 33,就表示起始时间是3:40,终止时间是7:33),输入的行数不确定,其中给定的时间不会有刚好分针时针重合的情况(比如12 00这样的数据就不会给),从开始到结束时针不会旋转超过360度,但不过从开始到结束时针可能会经过12点,这种情况下可以理解为起始是上午结束时下午,或者起始是晚上结束时早上,总之时间超不超过12个小时,对于每一行输入都要计算这段时间内时针扫过分针多少次,注释输入格式,时间上小时和分钟都占两位,十位没有用0补齐。

题目链接

注释代码:

/*                         * Problem ID : ZOJ 1122 Clock     * Author     : Lirx.t.Una                         * Language   : C               * Run Time   : 0 ms                         * Run Memory : 168 KB                        */#include <stdio.h>intmain() {intsh, eh;//starting hour and end hour,起始和结束的小时intsm, em;//starting minute and end minute,起始和结束的分钟//把时间看成一个一维的x轴,00:00为原点,长度单位为1分钟,比如3:33的坐标就是3 × 60 + 33//注意,为了闭包,12:00表示坐标0,因此12:xx的坐标为xxintsx, ex;//start x and end x axisintps;//passing times,分针扫过时针的次数printf("Program 3 by team X\n");printf("Initial time  Final time  Passes\n");while ( ~scanf("%d%d%d%d", &sh, &sm, &eh, &em) ) {//计算起始和终止的坐标sx = ( sh % 12 ) * 60 + sm;ex = ( eh % 12 ) * 60 + em;//计算方法是://时针转整整一周扫过次数刚好为11次,因此可以按比例划分//从原点经过12个小时的坐标刚好是720ps = ex * 11 / 720 - sx * 11 / 720;//!!!注意!!:不能将该式子化简合并,如果合并了答案就变成了从时刻0//到时间点end - start之间的扫过次数了printf("       %02d:%02d", sh, sm);printf("       %02d:%02d", eh, em);printf("%8d\n", sx > ex ? ps + 11 : ps);//如果差值为负数则再补一个周期即可}printf("End of program 3 by team X\n");return 0;}

无注释代码:

#include <stdio.h>intmain() {intsh, eh;intsm, em;intsx, ex;intps;printf("Program 3 by team X\n");printf("Initial time  Final time  Passes\n");while ( ~scanf("%d%d%d%d", &sh, &sm, &eh, &em) ) {sx = ( sh % 12 ) * 60 + sm;ex = ( eh % 12 ) * 60 + em;ps = ex * 11 / 720 - sx * 11 / 720;printf("       %02d:%02d", sh, sm);printf("       %02d:%02d", eh, em);printf("%8d\n", sx > ex ? ps + 11 : ps);}printf("End of program 3 by team X\n");return 0;}

单词解释:

analog:adj, 模拟的,有长短针的

instant:adj, 立即的,紧迫的; n, 瞬间,即刻

revolution:n, 旋转,循环,革命

vice versa:反之亦然

dial:n, 转盘,刻度盘,钟面

observe:vt, 注意

colon:n, 冒号

0 0
原创粉丝点击