- 题目内容:中国有句俗语叫“三天打鱼两天晒网”。若2010年1月1日,某人从这天起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用c/c++/java/python实现程序解决问题。
- 算法设计
- 输入这天的所在的年,月,日。
- 计算该天到2010年1月1日有多少天
2.1)首先计算出2010年1月1日到该天所在年的1月1日总共有多少天。
2.2)再计算出该天的月份到1月的天数。
2.3)最后算出该天的日到1日的天数。
2.4)将其全部相加就为总共的天数。
3.将总天数对5求余,即可得到余数
4.若余数1,2,3时,则该天为打鱼,否则为晒网。
- 测试(设计测试用例或测试代码的设计与实现,测试结果截屏))
- 调试(对测试出的问题进行调试,界面截屏,调试修正编码)
所得的时间与计算的时间不匹配。
- 心得体会(关键问题的解决思路及步骤总结)
在本次实验中感觉自己对与老师提出的提高要求的部分,还是有点不知道该如何处理,有点心有余而力不足,在代码的编写上还是应当注意注释的添加,编写代码也应尽可能的将其写活,这是以后在写代码时应当注意的问题。
- 源代码
package first;
public class Date {
int year ;
int month;
int day;
Date(int year,int month,int day){
this.year = year;
this.month=month;
this.day= day;
}
}
package first;
import java.util.Scanner;
public class Sayings {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入当前的日期:(年份回车月份回车日回车)");
int nowYear = scan.nextInt();
int nowMonth = scan.nextInt();
int nowDay = scan.nextInt();
int days = calculateDays(nowYear,nowMonth,nowDay);
check(days);
}
public static int calculateDays(int year,int month,int day ) {
Date date = new Date(2010,1,1);
int years = year - date.year;
int sumdays = 0;
int beforeyear =0;
int february = 0 ;
//year年前的所以天数之和;
for(int i=2010;i<year;i++) {
if((i%4==0&&i%100!=0)||(i%400==0)) {
february +=29;
}else {
february += 28;
}
}
beforeyear = february +(7*31+4*30)*years ;
//year年中所有月份的天数之和;
int i=1;
while(month!=i) {
if(i==2||i==4||i==6||i==9||i==11) {
sumdays +=30;
}else {
sumdays +=31;
}
i++;
}
if(month>2){
if((year%4==0&&year%100!=0)||(year%400==0)) {
sumdays -= 1;
}else {
sumdays -= 2;
}
}
//year年中该月的天数
i = 1;
while(day!=i) {
sumdays++;
i++;
}
sumdays+=beforeyear ;
System.out.println("从2010年1月1日到"+year+"年"+month+"月"+day+"日有"+sumdays+"天");
return sumdays;
}
public static void check(int days) {
int remainder = days%5;
if(remainder==1||remainder==2||remainder==3) {
System.out.println("打鱼");
}else {
System.out.println("晒网");
}
}
}