题目描述来源:牛客网

题目描述:

牛牛有一个学习计划,他计划在 y 年 m 月 d 日开始学习,但在之前他是绝不会开始学习的,但是他一旦开始学习就不会停下来,请你判断 y1 年 m1 月 d1 日牛牛应该学习吗。

输入描述:

第一行输入 y ,m ,d ,即牛牛计划开始学习的时间。

第二行输入 y1,m1,d1,即询问的时间。

输出描述:

请你判断牛牛是否开始学习。如果是则输出 yes ,否则输出 no

解题思路:

至少有2种解题方法

  1. 将所有天数加起来(1y == 365, 1m == 30, 1d = 1),看是否大于计划天数
  2. 直接比较年月日:年月大 -> 在学习计划。年月小 ->不在学习计划。年月相等 -> 进入比较日环节(日环节与年月基本相等,此处不再赘述)。

代码实现:

1.将所有天数加起来,比较天数

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	//计划的时间
	int y_plan = 0;
	int m_plan = 0;
	int d_plan = 0;
	int sum_plan = 0;
	//询问的时间
	int y = 0;
	int m = 0;
	int d = 0;
	int sum = 0;

	scanf("%d %d %d", &y_plan, &m_plan, &d_plan);
	scanf("%d %d %d", &y, &m, &d);

	//计算天数
	sum_plan = y_plan * 365 + m_plan * 30 + d_plan;
	sum = y * 365 + m * 30 + d;

	//大于等于计划时间 -> 在学习时间内
	if (sum >= sum_plan)
	{
		printf("yes\n");
	}
	//小于计划时间 -> 不在学习时间内
	else
	{
		printf("no\n");
	}

	return 0;
}

2.直接比较年月日

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	//计划的时间
	int y_plan = 0;
	int m_plan = 0;
	int d_plan = 0;
	//询问的时间
	int y = 0;
	int m = 0;
	int d = 0;
	//学习   -> 1
	//不学习 -> 0
	int flag = 0;

	scanf("%d %d %d", &y_plan, &m_plan, &d_plan);
	scanf("%d %d %d", &y, &m, &d);

	//比较年与月
	//
	//年或月大时,直接判断为是学习时间
	if (y > y_plan || m > m_plan)
	{
		flag = 1;
	}
	//比较日
	//
	//年或月大相等时,进入判断日阶段
	else if (y == y_plan && m == m_plan && d >= d_plan)
	{
		flag = 1;
	}

	if (1 == flag)
	{
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}

	return 0;
}

运行结果:

C语言解题 || 牛牛的计划_牛客网