|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是
地球上的一天是 24 小时。但地球上还有一些精力和勤奋度都远超一般人的大神级人物,他们的“一天”是以 48 小时为周期运转的,这种人被人们尊称为“外星人”。比如普通人的周一早 8:30 是外星人的周一早 4:15;普通人的周二早 9:21 是外星人的周一下午 4:40 —— 对外星人而言,一周的工作时间只有三天(即普通人的周一至周六),周日他们会蒙头大睡恢复体力,时间对他们是没有意义的。
在外星人眼里,地球人的时钟对他们而言实在是太不方便了。本题就请你为外星人们实现一款专用时钟。
输入格式:
输入在一行中给出一个不超过 10 的正整数 N,随后 N 行,每行给出一个地球人的时刻,格式为:Day hh:mm,其中Day是 [0,6] 区间内的整数,顺序代表周日至周六;hh是 24 小时制的小时数,是 [0,23] 区间内的整数;mm是分钟数,是 [0,59] 区间内的整数。
输出格式:
对输入的每一行地球人时刻,输出对应的外星人时间,格式与输入相同。其中Day在 [0,3] 区间内,对应周日到周三;分钟数若不是整数,则向下取整。注意:由于周日的时间对外星人没有意义,所以直接输出地球人的时间即可。
我的代码是#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int day,h,m;
while(n>0)
{
scanf("%d %d:%d",&day,&h,&m);
if(day==0) printf("%d %02d:%02d\n",day,h,m);
else{
if(day%2!=0)
{
h=h/2;
if(h%2!=0) m=(m+60)/2;
if(h%2==0) m=m/2;
printf("%d %02d:%02d\n",day,h,m);
}
if(day%2==0)
{ h=h/2;
if(h%2!=0) m=(m+60)/2;
if(h%2==0) m=m/2;
printf("%d %02d:%02d\n",day-1,h+12,m+30);
}
}
n--;
}
}
分析:
根据题目中的描述,我们可以将外星人的时间转换为 24 小时制,从而进行计算,具体地,将普通人的一个小时拆分为两个“外星人小时”,即将普通人的 1:00 转换成外星人的 2:00,将普通人的 2:30 转换成外星人的 3:15。
因此,我们可以先读入一个地球人的时刻,将其转换为分钟数,再将其转换为外星人的分钟数,最后再将其转换回地球人的时刻输出即可。
需要注意的是,周日的时间对外星人来说没有意义,因此可以直接输出地球人的时间。
代码实现:
- ++
- #include <stdio.h>
- int main()
- {
- int n;
- scanf("%d", &n);
- while (n--) {
- int day, h, m;
- scanf("%d %d:%d", &day, &h, &m);
- int earth_time = day * 1440 + h * 60 + m; // 计算地球人的时间(单位为分钟)
- int alien_time = (earth_time / 2) % (4 * 1440); // 计算外星人的时间(单位为分钟)
- // 如果是周日,则直接输出地球人的时间
- if (day == 0) {
- printf("%d %02d:%02d\n", day, h, m);
- } else {
- int alien_day = alien_time / 1440; // 外星人的天数
- int alien_hour = alien_time % 1440 / 60; // 外星人的小时数
- int alien_minute = alien_time % 60; // 外星人的分钟数
- // 如果是奇数天,则直接输出外星人的时间
- if (day % 2 == 1) {
- printf("%d %02d:%02d\n", alien_day, alien_hour, alien_minute);
- } else { // 如果是偶数天,则需要特殊处理
- alien_day--;
- alien_hour += 12;
- if (alien_minute >= 30) {
- alien_hour++;
- alien_minute -= 30;
- } else {
- alien_minute += 30;
- }
- printf("%d %02d:%02d\n", alien_day, alien_hour, alien_minute);
- }
- }
- }
- return 0;
- }
复制代码
注意,上述代码中的 1440 是一天的分钟数,等价于 24 * 60。
球一个最佳答案谢谢啦!这对我非常重要! 
|
|