概述
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:输入数据的正确性验证。
1、问题分析与算法设计
1)计算从2010年1月1日开始至指定日期共有多少天;
如何计算天数:假设日期为2018年10月10日
天数=2010年的天数+11-17年的整天数(平年365,闰年366天)
+2018年已经过得天数
注意:如果是同一年(输入日期过得天数-1即为所求天数)
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
2、算法描述流程图
3、具体代码:
package Dayu;
import java.util.Scanner;
public class Homework {
public static void main(String[] args){
Scanner s =new Scanner(System.in);
//输入年份
System.out.println("请输入年:");
int y=s.nextInt();
//判断输入的年份是否正确
if(y<2010){
System.out.println("输入年份有误");
return;
}
//输入月份
System.out.println("请输入月");
int m=s.nextInt();
//判断输入的月份是否正确
if(m<0||m>12){
System.out.println("输入月份有误");
return;
}
//输入日期
System.out.println("请输入日");
int d=s.nextInt();
//根据输入的月份判断输入的日期是否正确
switch(m){
case 1:
if(d<0||d>31){
System.out.println("输入日期有误");
return;
}
break;
case 2:
if((y%4==0&&y%100!=0||y%400==0)&&d<0||d>29){
System.out.println("输入天数有误");
return;
}else if((y%4!=0&&y%100==0||y%400!=0)&&d<0||d>28){
System.out.println("输入天数有误");
return;
}
break;
case 3:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
case 4:
if(d<0||d>30){
System.out.println("输入天数有误");
return;
}
break;
case 5:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
case 6:
if(d<0||d>30){
System.out.println("输入天数有误");
return;
}
break;
case 7:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
case 8:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
case 9:
if(d<0||d>30){
System.out.println("输入天数有误");
return;
}
break;
case 10:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
case 11:
if(d<0||d>30){
System.out.println("输入天数有误");
return;
}
break;
case 12:
if(d<0||d>31){
System.out.println("输入天数有误");
return;
}
break;
}
int sum=0;//记录输入的这个日期至2010年1月1日总共过去多少天
int sum1=0;//记录输入的这个日期在这一年已经过了多少天
//使用switch、case语句记录每个月的天数并相加
switch (m-1) {
case 1:sum1+=31;
case 2:if(y%4==0&&y%100!=0||y%400==0)
sum1+=29;
else
sum1+=28;
case 3:sum1+=31;
case 4:sum1+=30;
case 5:sum1+=31;
case 6:sum1+=30;
case 7:sum1+=31;
case 8:sum1+=31;
case 9:sum1+=30;
case 10:sum1+=31;
case 11:sum1+=30;
}
sum1+=d;//日期数
//如果输入的年份为2010,则总的天数就等于sum1
if(y==2010)
{
sum=sum1;
}else if(y>2010)
{
int sum2=365;//计算2010年有多少天
int sum3=0;//计算相差的年份的整天数闰年366,平年365
for(int i=2011;i<y;i++){
if(i%4==0&&i%100!=0||i%400==0){
sum3+=366;
}else{
sum3+=365;
}
}
//总的天数=2010年的天数+过去年的整天数+输入日期年份73已经过得天数
sum=sum1+sum2+sum3;
}
System.out.println(y+"年"+m+"月"+d+"日至2010年1月1日的天数是:"+sum);
if(sum%5==1||sum%5==2||sum%5==3)
{
System.out.println(y+"年"+m+"月"+d+"日在打鱼");
}else{
System.out.println(y+"年"+m+"月"+d+"日在晒网");
}
}
}
4、测试:
5、心得体会:
程序在判断日期是否正确以及累计天数的时候使用了switch、case语句,感觉比较烦锁,这个可以用数组方法int days[]={31,28,30……….}来验证和累计天数,这个后续上传。鉴于本人还是小菜鸟,代码不严谨,欢迎指教(嘻嘻嘻)。
最后
以上就是彩色红酒为你收集整理的“三天打鱼,两天晒网”------日期计算及判断和系统流程图的全部内容,希望文章能够帮你解决“三天打鱼,两天晒网”------日期计算及判断和系统流程图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复