杭电ACM1201java做法

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值