zoukankan      html  css  js  c++  java
  • java实现渔夫打鱼晒网

    package com.example.demo.sample;

    import java.util.Scanner;

    /**
    * Desc :如果一个渔夫从 2015 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2015 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。
    *
    * @author : GaoQiao
    * @date : 2019-05-22
    */
    public class FisherMan {
    /**
    * 技术要点:
    * <p>
    * 本实例主要有以下两个技术要点:
    * <p>
    * (1) 判断输入的年份(2015 年以后包括 2015 年)是否为闰年,这里自定义函数 leap() 来进行判断。该函数的核心内容就是闰年的判断条件即能被 4 整除但不能被 100 整除,或能被 400 整除。
    * <p>
    * (2) 求输入日期距 2015 年 1 月 1 日有多少天。首先判断 2015 年距输入的年份有多少年,这其中有多少年是闰年就将 sum 加多少个 366,有多少年是平年便将 sum 加上多少个 365。
    * <p>
    * 其次要将 12 个月每月的天数存到数组中,因为闰年 2 月份的天数有别于平年,故采用两个数组 a 和 b 分别存储。若输入年份是平年,月份为 m 时就在前面累加日期的基础上继续累加存储着平年每月天数的数组的前 m-1 个元素,将累加结果加上输入的日期便求出了最终结果。闰年的算法类似。
    *
    * @param args
    */
    public static void main(String[] args) {
    FisherMan fisherMan = new FisherMan();
    int year = 2019;
    int month = 05;
    int day = 20;
    for (int i = 0; i < 7; i++) {
    int n = fisherMan.number(year, month, day);
    // 余数是1或2或3时说明在打渔,否则在晒网
    if ((n % 5) < 4 && (n % 5) > 0) {
    System.out.println("日期[" + year + "年+" + month + "年" + day + "号],你在打鱼。 ");
    } else {
    System.out.println("日期[" + year + "年+" + month + "年" + day + "号],你在晒网。 ");
    }
    day++;
    }
    }

    /**
    * 自定义函数leap()用来指定输入的年份是否为闰年
    *
    * @param years
    * @return
    */
    int leap(int years) {
    if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
    // 闰年
    return 1;
    }
    // 平年
    return 0;
    }

    /**
    * 自定义函数 number() 计算输入日期距2011年1月1日共有多少天
    *
    * @param year
    * @param month
    * @param day
    * @return
    */
    int number(int year, int month, int day) {
    int sum = 0, i, j, k;
    // 数组a存放平年每月的天数
    int[] a = {
    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };
    // 数组b存放闰年每月的天数
    int[] b = {
    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };
    // 判断是否为闰年
    if (leap(year) == 1) {
    for (i = 0; i < month - 1; i++) {
    // 是闰年,累加数组b前m-1个月份的天数
    sum += b[i];
    }
    } else {
    for (i = 0; i < month - 1; i++) {
    // 不是闰年,累加数组a前m-1个月份的天数
    sum += a[i];
    }
    }
    for (j = 2015; j < year; j++) {
    if (leap(j) == i) {
    // 2011年到输入的年份是闰年的加366
    sum += 366;
    } else {
    // 2011年到输入的年份不是闰年的加365
    sum += 365;
    }
    }
    // 将前面累加的结果加上日期,求出总天数
    sum += day;
    // 返回计算的天数
    return sum;
    }
    }

    输出结果:

    日期[2019年+5年20号],你在晒网。

    日期[2019年+5年21号],你在打鱼。

    日期[2019年+5年22号],你在打鱼。

    日期[2019年+5年23号],你在打鱼。

    日期[2019年+5年24号],你在晒网。

    日期[2019年+5年25号],你在晒网。

    日期[2019年+5年26号],你在打鱼。

  • 相关阅读:
    vue-递归 组件嵌套组件循环 附加:(项目中可以用form来提交 或者 v-model 绑定的提交)
    Vue-开卡充值 -轮询
    bootstrap3 三级下拉菜单
    【UOJ #50】【UR #3】—链式反应(生成函数+分治NTT/多项式Exp+常微分方程)
    【CSP-S 2019模拟】题解
    【洛谷P4233】— 射命丸文的笔记(竞赛图+多项式求逆)
    【LOJ #2264】「CTSC2017」吉夫特(Lucas定理+Dp)
    【LOJ #3120】「CTS2019 | CTSC2019」珍珠(生成函数+NTT)
    【LOJ #2541】「PKUWC2018」猎人杀(容斥+分治NTT)
    【LOJ #2346】「JOI 2016 Final」断层(线段树)
  • 原文地址:https://www.cnblogs.com/gaoqiao/p/10906449.html
Copyright © 2011-2022 走看看