用JAVA解决“三天捕鱼,两天晒网“问题

问题描述:
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
问题分析:
需要解决这个数学问题,我们首先考虑中间的年份是否出现闰年这种特殊情况,如果出现闰年,那么一年的年数就会变成366天,如果本年是闰年的话,必须考虑月份是否在2月之前,还是2月之后。如果2月之前的话,就不用考虑2月有29天的情况。如果在2月之后,就必须考虑2月的特殊天数29天。
算法分析
1.通过输入的日期来首先判断输入的日期是否合法,以进行下一步判断操作。如果输入的年份小于2010,或者年份大于2010,但月份大于13或小于1,日期大于31或小于1,系统自动报错。
2.判断是否含有闰年,判定条件为定义年份为y,当(y%4==0&&y%100!=0)时,为闰年,那一年的天数为366天。否则为平年,天数为365天。
3.计算距离2010年1月1日的时间,通过分别计算差的年的天数和本年的之前月的天数加上本月的天数得到总时间。
4.通过除5来得到余数,分别判断事件。小于等于3在打鱼,大于3在晒网。
流程图
在这里插入图片描述
源代码

import java.util.Scanner;
public class buyu {
    public static int Days(int y, int m, int d) {
        int day1 = 0;//之前每年的天数
        for (int i = 2010; i < y; i++) {
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
                day1 += 366;//闰年为365天
            } else {
                day1 += 365;//平年为365天
            }
        }
        int day2 = 0;//本年每月的天数
        int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (y % 4 == 0 && y % 100 != 0) {//判断是不是闰月
            month[1] = 29;
        }
        for (int i = 1; i < m; i++) {
            day2 += month[i];
        }
        int sum = day1 + day2 + d;//总共的天数
        return 0;
    }
    public static void main(String[] args) {
        {
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入年份");
            int y = scan.nextInt();
            System.out.println("请输入月份");
            int m = scan.nextInt();
            System.out.println("请输入日期");
            int d = scan.nextInt();
            if (y<2010) {
                System.out.println("输入年份错误");
                if(m<1||m>12){
                System.out.println("输入月份错误");}
            if (!(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)) {  //非闰年输入2月天数大于等于29,报错
                if(m == 2){
                    if(d >= 29 || d<1){
                    System.out.println("输入日期错误");}
                }
            }
            else if(d<1||d>31){
                    System.out.println("输入日期错误");}}
            else{
                int s = Days(y, m, d);
                int i = s % 5;
                if (i >= 1 && i <= 3) {
                    System.out.println("捕鱼");
                } else {
                    System.out.println("晒网");
                }
            }
        }
    }
}


测试结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值