#include <stdio.h>
#include <stdlib.h>
// write your code here......
struct time//时间结构体,包含时、分、秒
{
int hour;
int minute;
int second;
};
struct t//存放每个“t秒”
{
int at;//after t seconds
};
void after(struct time* p, int n, struct t* arr )//该函数用来计算每次经过t秒后的时间并输出
{
//定义三个变量存放每次循环后的时、分、秒,做为下次循环的初始时间
int hour =0;
int minute = 0;
int second = 0;
for(int i = 0; i < n; i++)
{
if(arr[i].at >= 0 && arr[i].at < 60)//当t在0-60秒之间
{
p[i].hour = hour;//当前“时”等于上一次循环后的“时”
p[i].minute = minute;//当前“分”等于上一次循环后的“分”
p[i].second = arr[i].at + second;//当前“秒”等于上一次循环后的“秒”+新增的“t秒”
}
if(arr[i].at >= 60 && arr[i].at < 3600)//当t在60-3600之间
{
//计算原理同上
p[i].hour = hour;
p[i].minute = arr[i].at / 60 + minute;
p[i].second = arr[i].at % 60 + second;
}
if(arr[i].at >= 3600)
{
//计算原理同上
int temp=arr[i].at / 3600;//定义一个临时变量temp,存放本次t秒中的“时”部分
p[i].hour = arr[i].at / 3600 + hour;
p[i].minute = (arr[i].at - temp * 3600) / 60 + minute;//t秒减去“时”部分后,用剩下的时间即可 求得新增的“分”
p[i].second = arr[i].at % 60 +second;
}
if(p[i].second >= 60)//如果“time”中存放的“秒”大于等于60则进位
{
p[i].minute += p[i].second / 60;
p[i].second = p[i].second % 60;
}
if(p[i].minute >= 60)//如果“time”中存放的“分”大于等于60则进位
{
p[i].hour += p[i].minute / 60;
p[i].minute = p[i].minute % 60;
}
//将计算后的结果重新赋值给变量“时”、“分”、“秒”
hour = p[i].hour;
minute = p[i].minute;
second = p[i].second;
}
//打印每次经过t秒后的时间
for(int j = 0; j < n; j++)
{
printf("%d %d %d\n",p[j].hour, p[j].minute, p[j].second);
}
}
int main() {
int n;
scanf("%d",&n);
struct time* p=(struct time*)malloc(n*sizeof(struct time));//动态分配内存以创建结构体数组
struct t* q=(struct t*)malloc(n*sizeof(struct t));
for (int i = 0; i < n; i++) //依次输入时间t
{
scanf("%d",&q[i].at);
}
// write your code here......
after(p, n, q);//调用函数完成计算
free(p);//释放内存
free(q);
return 0;
}