zoukankan      html  css  js  c++  java
  • 打鱼晒网

    问题描述:

      中国有句俗语叫“三天打鱼两天晒网”。假如某人从1999年9月9日起开始“三天打鱼两天晒网”,问这个人在以后的任意一天是”打鱼“还是”晒网“?

    问题分析:

      根据题意可以将题目过程拆分:

      1) 计算从1999年9月9日开始至指定日期共有多少天。

      2) 由于”打鱼“和”晒网“的周期为5天,所以将计算出的天数用5去除。根据余数判断他是在”打鱼“还是”晒网“。

      在这个步骤中,第一步是关键。计算天数,要判断年份中是否有闰年,闰年二月29天,平年二月28天。

    import java.util.Scanner;
    
    
    /**
     * 打鱼还是晒网
     *
     */
    public class FishOrNet {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("请输入1999年9月9日之后的日期:");
    		System.out.print("年:");
    		int year = sc.nextInt();
    		System.out.print("月:");
    		int month = sc.nextInt();
    		System.out.print("日:");
    		int day = sc.nextInt();
    		//1. 计算输入日期距离1999年9月9日的天数
    		int zhongtian = getDays(year, month, day);
    		System.out.println("输入日期距离1999年9月9日的天数:" + zhongtian);
    		//2. 判断打鱼还是筛网
    		if (zhongtian % 5 == 1 || zhongtian % 5 == 2 || zhongtian % 5 == 3) {
    			System.out.println("打鱼");
    		} else {
    			System.out.println("晒网");
    		}
    	}
    	
    	/**
    	 * 计算从1999年9月9日开始至指定日期共有多少天
    	 * 	思路:1. 输入年份的前一年  到 1999.9.9共有多少天
    	 * 			1.1 输入年份是1999年
    	 * 			1.2 不是1999年:计算1999年总共多少天,然后循环其他年份
    	 * 		2. 计算输入这一年 有多少天
    	 * 			2.1 定义数组存储每个月的天数
    	 * @param year 年
    	 * @param month 月
    	 * @param day 日
    	 * @return 返回总天数
    	 */
    	public static int getDays(int year, int month, int day){
    		//存储总天数
    		int sumDays = 0;
    		//计算总天数
    		if(year == 1999){//输入年份是1999年
    			switch (month) {
    			case 9:
    				sumDays = day - 8;
    			case 10:
    				sumDays = 22 + day;
    			case 11:
    				sumDays = 22 + 31 + day;
    			case 12:
    				sumDays = 22 + 31 + 30 + day;
    			}
    		}else if(year > 1999){//输入年份是1999年之后
    			sumDays = 114;//1999年的天数:22+31+30+31
    			//循环从2000年开始,到输入年份的前一年,所以结束条件是 小于输入年份;最后一年单独算
    			for(int i = 2000; i < year; i++){
    				if(runNian(year)){//调用判断闰年的方法,如果是闰年,总天数+366
    					sumDays = sumDays + 366;
    				}else{//如果是平年,总天数+365
    					sumDays = sumDays + 365;
    				}
    			}
    			//用数据存储每个月的天数
    			int run[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//闰年
    			int ping[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//平年
    			//计算输入这一年的天数,从一月开始循环,结束条件是输入月份;注意:输入月份不能计算,所以结束条件 小于输入月份
    			for(int i = 1; i < month; i++){
    				if(runNian(year)){//调用判断闰年的方法,如果是闰年,读取数组run
    					sumDays = sumDays + run[i-1];//月份从1开始,但是数组下标从0开始,所以-1
    				}else{//如果是平年,读取数组ping
    					sumDays = sumDays + ping[i-1];
    				}
    			}
    			//讲输入这一个月的天数加到总天数里边
    			sumDays = sumDays + day;
    		}else{
    			System.out.println("请输入1999年9月9日之后的日期!!!");
    		}
    		return sumDays;
    	}
    	
    	/**
    	 * 判断是否闰年
    	 * @return true闰年;false平年
    	 */
    	public static boolean runNian(int year){
    		if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
    			return true;
    		}
    		return false;
    	}
    
    }
    

      

  • 相关阅读:
    getline函数
    Java获取某年某月的第一天
    计划任务中使用NT AUTHORITYSYSTEM用户和普通管理员用户有什么差别
    Windows 7系统安装MySQL5.5.21图解
    C#高性能大容量SOCKET并发(十一):编写上传client
    Linux 终端訪问 FTP 及 上传下载 文件
    完毕port(CompletionPort)具体解释
    ping不通的几种可能原因
    Apple Swfit UI控件实现
    js中取session的值
  • 原文地址:https://www.cnblogs.com/jinyufanfan/p/6424867.html
Copyright © 2011-2022 走看看