三天打鱼,两天晒网(C++实现)

该博客介绍了一个使用C++实现的程序,根据中国谚语‘三天打鱼两天晒网’来判断给定日期是打鱼还是晒网。程序首先计算输入日期与2010年1月1日之间的天数差,然后通过余数判断是打鱼日(余数小于3)还是晒网日(余数大于等于3)。同时,程序还包含输入验证,确保输入的日期合法。
摘要由CSDN通过智能技术生成

三天打鱼,两天晒网(C++实现)

题目:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
输入格式:

输入在一行中给出三个整数,分别代表年月日

输入样例1:

2020 11 28

输出样例

你在“晒网”

输入样例2:

2012 13 28

输出样例2:

请修正月份,月份应大于0小于等于12

2012 12 28
请修正月份,月份应大于0小于等于12
这一天距2010年1月1日已经过去了1123天
你在“晒网”

代码

#include <iostream>
#include<string>
#include<fstream>
using namespace std;
//计算2010年1月1日后的某天距这天的天数差
int DaySum(int year, int month, int day) {
    //天数的累加器
    int sum = 0;
    //循环加每一年的天数
    for (int i = 2010; i < year; i++)
    {
        //判断是否是闰年,闰年sum加366,平年加365
        if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
            sum += 366;
        }
        else {
            sum += 365;
        }
    }
    //当前的月份不一定恰好是最后一天
    month--;
    //判断月份类型,并循环加多出来的每一月的天数
    if (month > 0) {
        for (int j = 1; j <= month; j++) {
            //判断特殊月份2月
            if (j == 2) {
                //闰年二月sum加29
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    sum += 29;
                }
                //平年sum加28
                else
                    sum += 28;
            }
            else if (j == 1 || j == 3 || j == 5 || j == 7 || j == 8 || j == 10 || j == 12) {
                //大月sum加31
                sum += 31;
            }
            else
                sum += 30;
        }
    }

    //sum加上多出来的天数得到最终答案
    sum += day - 1;
    return sum;
}
//判断某年某天是打鱼还是晒网
string Judge(int daySum) {
    //用所经历的天数%5,判断余数与3的大小,大于3晒网,小于3打鱼
    int x = daySum % 5;
    if (x < 3)return "你在“打鱼”";
    else return "你在“晒网”";
}
//判断输入是否合法
void keepsure(int* year, int* month, int* day) {
    int y = *year;
    int m = *month;
    int d = *day;
    while (y < 2010) {
        cout << "请修正年份,年份至少大于2010" << endl;
        cin >> y;
    }
    while (m < 1 || m > 12) {
        cout << "请修正月份,月份应大于0小于等于12" << endl;
        cin >> m;
    }
    if (m == 2) {
        if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
            while (d > 29 || d < 1) {
                cout << "请重新输入,这一年的2月份天数只有29天" << endl;
                cin >> d;
            }
        }
        else {
            while (d > 28 || d < 1) {
                cout << "请重新输入,这一年的2月份天数只有28天" << endl;
                cin >> d;
            }
        }

    }
    if (m != 2) {
        if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
            while (d > 31 || d < 1) {
                cout << "请重新输入,这一年的这月份天数只有31天" << endl;
                cin >> d;
            }
        }
        else {
            while (d > 30 || d < 1) {
                cout << "请重新输入,这一年的这月份天数只有30天" << endl;
                cin >> d;
            }
        }

    }
}
int main()
{
    cout << "请依次输入年月日:";
    int year;
    int month;
    int day;
    cin >> year >> month >> day;
    keepsure(&year, &month, &day);
    int sum = DaySum(year, month, day);
    cout << "这一天距2010年1月1日已经过去了" << sum << "天" << endl;
    cout << Judge(sum) << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值