PTA 7-179 小文的心理阴影时刻
分数 7
作者 林生佑
单位 浙江传媒学院
小文十分守时,和别人约会一般会提前k秒钟到,如果对方不准时,他等候k秒钟后也会自行离开。如果称这段时间为小文的心理阴影时间,请编程输出小文的心理阴影时间的起始和结束时刻。
输入格式:
有多组输入数据。先读入一个整数n,接下来包含n行,每行有一个24小时制的时分秒的时间和k秒数
输出格式:
输出心理阴影时间的起始时刻和结束时刻(如果大于等于24:00:00,则从00:00:00开始计数,如果小于00:00:00,则从23:59:59秒开始倒数)
输入样例:
1
12 10 30 40
输出样例:
12:09:50 12:11:10
代码长度限制
16 KB
C (gcc)
时间限制
400 ms
内存限制
64 MB
其他编译器
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
void values(int *send, int *x, int *y, int *z){ //求时分秒
*x = *send / 3600; //时
*y = (*send - 3600 * *x) / 60; //分
*z = *send - (3600 * *x + 60 * *y); //秒
}
int main(){
void values(int *send, int *x, int *y, int *z);
int n, hour, minute, second, seconds; //时分秒(hour, minute, second); 等待时间(seconds)
int _hour, _minute, _second;
int _totalNd; //提前到的时间的总秒数
int _totalNds; //离开后的时间的总秒数
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d %d %d %d", &hour, &minute, &second, &seconds);
_hour = hour; //离开后的小时
_minute = minute; //离开后的分钟
_second = second; //离开后的秒
_totalNd = 3600 * hour + 60 * minute + second - seconds; //提前到的时间的总秒数
_totalNds = _totalNd + 2 * seconds; //离开后的时间的总秒数
values(&_totalNd, &hour, &minute, &second); //调用函数
if(_totalNd < 0){ //提前到的时间
_totalNd += 86400;
values(&_totalNd, &hour, &minute, &second); //调用函数
printf("%02d:%02d:%02d ", hour, minute, second);
}else{
printf("%02d:%02d:%02d ", hour, minute, second);
}
values(&_totalNds, &_hour, &_minute, &_second); //调用函数
if(_hour >= 24){ //离开的时间
_hour -= 24;
printf("%02d:%02d:%02d\n", _hour, _minute, _second);
}else{
printf("%02d:%02d:%02d\n", _hour, _minute, _second);
}
}
return 0;
}
解题思路:
step1:算出到达的时间有多少秒,再求出离开的时间有多少秒
step2:算出到达的时间的时分秒和出离开的时间的时分秒
step3:考虑特殊情况和每种情况的算法,然后分情况输出即可
归属知识点:
指针
无返回值函数
选择结构