一、题目。
中国有句俗语叫“三天打鱼两天晒网”。某人从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("今天晒网");
}
}
}