C语言实现:三天打鱼两天晒网

该博客通过C语言解决了一个有趣的问题:如何判断从1990年1月1日起的某一天是在“打鱼”还是“晒网”。思路是计算指定日期与1990年1月1日之间的天数,然后对5取余,余数1-3表示打鱼,0或4表示晒网。博客中包含了具体的代码实现,并测试了不同日期的情况,包括非法日期的处理。
摘要由CSDN通过智能技术生成

题目:

中国有句俗语:“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天是在“打鱼”还是在“晒网”?

思路:

  1. 首先求出从1990年1月1日到指定日期之间经过的天数;
  2. 经分析,打鱼晒网是5天一轮回,所以用天数对5取余来判断打鱼还是晒网。

具体解释:

  • 观察发现,打鱼晒网是5天一个轮回,前三天打鱼,后两天晒网
  • 由此可以利用经过的总天数对5取余的方式来判断打鱼还是晒网;
  • 经分析:取余结果为1、2、3时打鱼,结果为0或4时为晒网
  • 因此需要求出指定的某一天到1990年1月1日期间共有多少天;
  • 平年闰年分情况讨论,能被4整除但不能被100整除能被400整除的年份为闰年,有366天,其余为平年,为365天;
  • 求天数时将整年和非整年单独处理:整年直接天数增加366或365;非整年则根据月数以及日期利用循环来求出具体天数;
  • 将平年闰年两种年的每月天数分别存储进数组,用来解决不是整年的剩余天数;
  • 最后根据之前的分析,取余求出结果。

注:还应当对用户输入的日期进行合法判断,例如平年2月没29号、4月没31号等。

代码:

#include <stdio.h>
#include <stdlib.h>
#define YEAR 1990   //宏定义初始年月日
#define MONTH 1
#define DAY 1
/*
        三天打鱼两天晒网
题目:
    中国有句俗语:“三天打鱼两天晒网”,
    某人从1990年1月1日起开始“三天打鱼两天晒网”。
    问这个人在以后的某一天是在“打鱼”还是在“晒网”?
*/
int Input();    //录入数据并判断是否合法

int Days(int, int, int);    //求期间的天数,参数为年月日

int Days(int year, int month, int day)
{
   
    int days = 0;   //期间共有多少天
    int days_tmp = 0;   //不满一年的整月天数
    int ping_nian[] = {
   31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int run_nian[] = {
   31, 29, 31,</
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值