1.如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。
int leo(int a)
{
if (a % 400 == 0 || a % 4 == 0 && a % 100 != 0)
{
return 1;
}
else
return 0;
}
int messi(int year, int month, int day)
{
int i = 0;
int sum = 0;//总天数设为sum
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 };//闰年各月份
if (leo(year) == 1)
{
for (i = 0; i < month - 1; i++)//计算到前一个月 因为这个月可能没过完
//而且由于是坐标 所以从0开始
{
sum += b[i];
}
}
else
{
for (i = 0; i < month - 1; i++)
{
sum += a[i];
}
}
int j = 0;
for (j = 2011; j < year; j++)//同月份一样 从2011年到输入的前一年
{
if (leo(year) == 1)
{
sum += 366;//如果是闰年加366
}
else
{
sum += 365;//从2011到现在不是闰年加365
}
}
sum += day;//加上输入的天数
return sum;
}
#include<stdio.h>
int main()
{
//输出以后的任意一天的年月日 即是具体的日期
int year = 0;
int month = 0;
int day = 0;
scanf_s("%d %d %d", &year, &month, &day);
int ret=messi(year, month, day);//ret接收返回值 这个值就是
//从开始那一天到我们所找的之后的任意一天之间的时间
if ((ret%5)<= 3&&(ret%5)>0)//三天打鱼两天晒网 则以5为一个大周期
//总天数%5 余数为1,2,3则在打鱼 0,1,2则在晒网
{
printf("打鱼");
}
else
{
printf("晒网");
}
return 0;
}