天天看点

打鱼晒网问题

#include <iostream>
using namespace std;

/*题目:
如果一个渔夫从2000年1月1日开始每三天打一次鱼,两天晒一次网,编程实现档输入2000年1月1日以后的任意一天,
输出该渔夫是在打鱼还是在晒网
*/

/*分析
根据题意假设鱼的总数是x,那么第一次每人分到的鱼的数量可用(x一1)巧表示,余下的鱼数为4*
(x-l)巧,将余下的数量重新赋值给x,依然调用(x一1)巧,如果连续5次x一1均能被5整除,则说明最初
的x值便是本题目的解。
*/

int number(int y, int m, int d)
{
    int sum = 0, i, j, k;
    int a[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int b[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int leap = y % 4 == 0 && y % 100 != 0 || y % 400 == 0 ? 1 : 0;

    for (i = 0; i < m - 1; i++)
    {
        if (leap == 1)
            sum += b[1];
        else
            sum += a[i];
    }

    for (j = 2000; j < y; j++)
    {
        if (leap == 1)
            sum += 366;
        else
            sum += 365;
    }
    
    sum += d;
    return sum;
}

int main()
{
    int y, m, d, n;
    cout << "please input year, month, day\n";
    cin >> y;
    cin >> m;
    cin >> d;

    n = number(y, m, d);
    if ((n % 5) < 4 && (n % 5) > 0)
        cout << y << " - " << m << " - " << d <<" 他尽然在打鱼!";
    else
        cout << "又在晒网";
    return 0;
}