题目:
描述
牛牛在午夜12点(0点0分0秒)正在思考,在 t 秒之后是什么时间。他思考了 n 次这个问题。
输入描述:
第一行输入一个正整数 n。
第二行输入 n 个正整数 t ,表示 t 秒之后。
输出描述:
输出 n 行,每行输出 t 秒之后的时间。
例:
//输入
4
60 61 1 2
//输出
0 1 0//表示60秒之后是0点1分0秒
0 2 1//表示再过61秒之后是0点2分1秒
0 2 2//...
0 2 4
实现思想:
因为输入的是秒数,所以我们将所有数据都存到秒中。
然后进循环,秒数每至60,分数+1,秒数-60,以此类推。
代码实现:
1.利用结构体,输入时直接计算、打印结果,且不存储数据
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//存放时分秒
struct Time
{
int hour;
int minute;
int second;
};
int main()
{
int i = 0;
int n = 0;
int sum = 0;
int tem_second = 0;
struct Time s = { 0 };
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &tem_second);
//直接计算此次时间
s.second += tem_second;
while (s.second >= 60)
{
s.second -= 60;
s.minute++;
}
while (s.minute >= 60)
{
s.minute -= 60;
s.hour++;
}
printf("%d %d %d\n", s.hour, s.minute, s.second);
}
return 0;
}
2.利用动态开辟空间,存放多组数据,然后集中计算输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
int main()
{
int n = 0;
int* p = NULL;
int i = 0;
int hour = 0;
int minute = 0;
int second = 0;
scanf("%d", &n);
p = (int*)calloc(n, sizeof(int));
if (p == NULL)
{
perror("calloc");
return 1;
}
//输入
for (i = 0; i < n; i++)
{
scanf("%d", p + i);
}
//计算
for (i = 0; i < n; i++)
{
second += *(p + i);
while (second >= 60)
{
second -= 60;
minute++;
}
while (minute >= 60)
{
minute -= 60;
hour++;
}
printf("%d %d %d\n", hour, minute, second);
}
free(p);
p = NULL;
return 0;
}