18岁生日
Problem Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
1
1988-03-07
Sample Output
Problem Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
1
1988-03-07
Sample Output
6574
看起来很简单的题目,结果自己粗心大意,理解错了,以为是算这个人从出生到今天有没有到18岁。。理所当然的错光了。。。照着别人C语言里的代码,改成java的,第一次,这么改
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int i,y,m,d,sum,x;
while(n--!=0)
{
sum=0;
String days=sc.next();
String[]days2=days.split("-");
int []num=new int[3];
for(int z=0;z<days2.length;z++){
num[z]=Integer.parseInt(days2[z]);
}
if(num[1]==2&&num[2]==29)
{
System.out.println("-1");
continue;
}
if((num[0]%4==0&&num[0]%100!=0||num[0]%400==0)&&num[1]<3) sum++;
x=num[0]+18;
if((num[0]%4==0&&num[0]%100!=0||num[0]%400==0)&&num[1]>3)
sum++;
for(i=num[0]+1;i<num[0]+18;i++)
if(i%4==0&&i%100!=0||i%400==0)
sum++;
System.out.println(365*18+sum);
}
}
}居然给了我WA,明明答案对的啊!好吧当时一时心急,想马上AC掉这道题目,也没细看做法,感觉写的有些混乱,感觉中间写的那两个if没什么用,就删了,代码就成这样import java.util.Date;
import java.util.Scanner;
public class Q1201t {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int i,y,m,d,sum,x;
while(n--!=0)
{
sum=0;
String days=sc.next();
String[]days2=days.split("-");
int []num=new int[3];
for(int z=0;z<days2.length;z++){
num[z]=Integer.parseInt(days2[z]);
}
if(num[1]==2&&num[2]==29)
{
System.out.println("-1");
continue;
}
for(i=num[0]+1;i<num[0]+18;i++)
if(i%4==0&&i%100!=0||i%400==0)
sum++;
System.out.println(365*18+sum);
}
}
}
好吧还是WA,再改。。
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int i,y,m,d,sum,x;
while(n--!=0)
{
sum=0;
String days=sc.next();
String[]days2=days.split("-");
int []num=new int[3];
for(int z=0;z<days2.length;z++){
num[z]=Integer.parseInt(days2[z]);
}
if(num[1]==2&&num[2]==29)
{
System.out.println("-1");
continue;
}
else
{
for(i=num[0]+1;i<num[0]+18;i++)
{
sum+=haha(i);
}
int t=0;
if(num[1]>2||(num[1]==2&&num[2]==29))
{
if(haha(num[0]+18)==366)
t++;
}
if(num[1]<2||(num[1]==2&&num[2]<29))
{
if(haha(num[0])==366)
t++;
}
System.out.println(sum+365+t);
}
}
}
public static int haha(int yoo)
{ int z;
if((yoo%400==0)||(yoo%4==0&&yoo%100!=0))
z=366;
else
z=365;
return(z);
}
}通过了。。。具体原因,不详。。
文章详细介绍了如何通过编程解决计算个人从出生到18岁生日所经过的天数的问题,包括处理闰年和非闰年的区别,并通过多个实例展示了解题过程。
168

被折叠的 条评论
为什么被折叠?



