杭电ACM1201java做法

来源:互联网 发布:淘宝网儿童服装女装 编辑:程序博客网 时间:2024/04/28 20:25
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

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);    } }
通过了。。。具体原因,不详。。


0 0