打鱼还是晒网

一、题目。

 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。

基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。

提高要求:1.输入数据的正确性验证。

          2.使用文件进行数据测试。如将日期 20100101   20111214  等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。

二、算法分析

   1.首先从键盘输入年月日,并确保输入的正确性

   2.确定2010到输入年份的闰年和平年的个数。

   3.确保输入年份之前的总天数

   4.计算总天数,判断打鱼还是晒网。

三、流程图

 

 

四、源代码

package program;

import java.util.Scanner;

public class WeekOneWork {
     static Scanner date = new Scanner(System.in);//设置输入的日期为静态变量
        public static void main(String[] args) {
           int  year,mouth,day;
           System.out.printf("请依次输入年,月,日,每输入一个数据后按enter进行下一个输入");
           //定义变量年月日,并提醒用户输入年月日
           year= date.nextInt();
           mouth= date.nextInt();
           day= date.nextInt();
           System.out.print("年份:"+year+"\n月份:"+mouth+"\n日期:"+day+"\n");
           //用户输入年月日,并打印出用户所输入的年月日
           if(year>=2010){
        System.out.println("年份为:"+year);
           }
           else{
          System.out. print("您输入的年份有误,请输入一个不小于2010的年份:");   
               year= date.nextInt();
               System.out.println("年份为:"+year);
                }/*判断用户输入的年份是否合理,对不合理的年份予以警告并提示修改,最终显示正确的年份*/
           if(mouth<=12){
          System.out.println("月份为:"+mouth);
                                   }
             else{
            System.out. print("\n您输入的月份有误,请输入一个不大于12的月份:"+"\n");   
                 mouth= date.nextInt();
                 System.out.println("月份为:"+mouth);
             }//判断用户输入的月份是否合理,对不合理的月份予以警告并提示修改,最终显示正确的月份
           System.out.printf("年份:"+year+"\n月份:"+mouth+"\n日期:"+day+"\n");
                 //打印出用户确定的最终结果
         int d;         //定义局部变量d,来表示闰年与平年二月的天数
         if((year%4==0&&year%100!=0)||(year%400==0))//判别是否为闰年
           {
            d = 29; 
           }    
         else
          {
           d = 28; 
          }
         int count=0;
         int a,b;
         if(year>=2010)//判断当年之前有几个闰年和平年
         {
             a=(year-2010)/4;//判断有几个闰年
             b=(year-2010)%4;//4年一个单位后最后剩余的有几年
             count=a*366+(a*3+b)*365;//当年之前总共经历过多少天
         }


         int[]D={31,d,31,30,31,30,31,31,30,31,30,31};//从D0开始表示一年各个月的天数,二月用0表示,下面计算天数再加
         int sum=0 ;
         for(int i=1;i<=mouth ;i++){
           sum = sum+D[i]+count;//从2010年1月1号开始计算的总天数
         }
         
         int j=sum%5;//周期为五天,天数除以5取余数进行判断
         if(j==1||j==2||j==3){
             System.out.printf("今天打渔");
         }
       else{
             System.out.printf("今天晒网");
             }
         
        } 
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值