【Java】三天打鱼两天晒网
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言等实现程序解决问题。
本作业待办(完成打勾✔):
程序分析
- 绘画流程图
- 代码实现
- 结果验证
- 友情提示
编程新手跳转学习Hello World!
示例输出:
输入一个年份
2011
输入一个月份
6
输入一个天
8
2011年6月8日他在打鱼
此间共过去了552天
示例输出:
输入一个年份
2009
输入错误
-----------------过度线-----------------
一.程序分析:
1.首先计算从2010年1月1日开始到用户的指定日期共有多少天,可以从年月日分别计算并累计。
2.由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数,如果大于5天用5去除。
3.根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”否则 是在“晒网”。
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则该年是闰年否则该年就不是闰年。
二.流程图:
三.代码实现部分:
import java.io.*;
import java.util.Scanner;
public class prediction {
public static void main(String[] args) {
int year=2010,month=0,day=0;
int t=0;
int days=0;
int lkf;
//年份
System.out.println("输入一个年份");
Scanner reader=new Scanner(System.in);
int lyear=reader.nextInt();
if(lyear<2010) {
System.out.println("输入错误");
return ;
}
//月份
System.out.println("输入一个月份");
int lmonth=reader.nextInt();
if(lmonth<0&&lmonth>12) {
System.out.println("输入错误");
return;
}
else
t=lmonth;
//判断是否闰年
if(lyear%4==0||lyear%40==0||lyear%400==0) {
if(t==2)
t = 66;
days=days+366*(lyear-2010);
}
else
days=days+365*(lyear-2010);
switch(t){
case 12:days+=30;
case 11:days+=31;
case 10:days+=30;
case 9:days+=31;
case 8:days+=31;
case 7:days+=30;
case 6:days+=31;
case 5:days+=30;
case 4:days+=31;
case 3:days+=28;
case 66:days+=29;
case 2:days+=31;
case 1:days+=0;
}
//天
System.out.println("输入一个天");
int lday=reader.nextInt();
days=days+lday-1;
if(days<5) {
if (days == 1 || days == 2 || days == 3)
System.out.printf("%d年%d月%d日他在打鱼", lyear, lmonth, lday);
}
else {
lkf = days % 5;
if (lkf == 0 || lkf == 1 || lkf == 2)
System.out.printf("%d年%d月%d日他在打鱼", lyear, lmonth, lday);
else
System.out.printf("%d年%d月%d日他在晒网", lyear, lmonth, lday);
}
System.out.printf("\n此间共过去了%d天",days);
}
}
四.结果分析
五.实验心得
暂无