题目:

描述

牛牛在午夜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;
}

运行结果:

C语言解题 || 牛牛的时钟_C语言解题