#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; }