Java中的“ ***错误*** bash:第1行:7854被杀死”

时间:2018-12-28 18:58:30

标签: java

我正在尝试解决以下USACO练习问题:

  

13日星期五真的是不寻常的事件吗?

     

也就是说,每月的13号在星期五降落的频率是否比一周中的其他几天少?要回答这个问题,请编写一个程序,计算在给定的N年内每月13号在星期日,星期一,星期二,星期三,星期四,星期五和星期六登陆的频率。在给定的年限内,测试时间段将从1900年1月1日到1900年12月31日+N-1。N为非负数,并且不超过400。

     

解决此问题之前,您需要了解的几个事实:

     
      
  • 1900年1月1日是星期一。
  •   
  • 三十天是九月,四月,六月和十一月,其余所有三十一天,除了二月有28天,leap年只有29天。
  •   
  • 每年被4整除的年份是is年(1992 = 4 * 498,因此1992年将是>年,但1990年不是a年)
  •   
  • 以上规则在数百年内不成立。被> 400整除的世纪年是leap年,其他所有年份都不是。因此,世纪1700、1800,> 1900和2100不是leap年,而2000是is年。
  •   
     

请勿使用计算机语言中的任何内置日期功能。

     

请不要只是预先计算答案。

我编写了一个似乎适用于大多数测试用例的解决方案,但是对于一个测试用例,出现以下错误:

***Error***
bash: line 1:  7854 Killed              java -Xms16m -Xss16m -Xmx32m friday

这是我的代码:

import java.util.Scanner;
public class friday
{
    static int day = 1;
    static  int month = 1;
    static int year = 1900;
    static int[] days = new int[7];
 public static void main(String[] args) {
    int num;
    Scanner input = new Scanner(System.in);
    num = Integer.parseInt(input.nextLine());
    counter(num);
    for (int i=0; i<7; i++)
    {
    System.out.print(days[i]+ " ");
    }
 }
 public static void counter(int n)
 {
     int index=2;
     days[2]=1;
     while (year<1900+n)
    {
        day++;
        index++;
        if (index>6)
        index=0;
        if (day==29 && (year % 4!=0 ^ year % 100==0) && month==2)
        incrementmonth();
        if (day==31 && (month==4 || month==6 || month==9 || month==11))
        incrementmonth();
        if (day==32 && (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12))
        incrementmonth();
        if (day==13)
        days[index]++;
    }
    days[2]--;
 }
 public static void incrementmonth()
 {
     day=1;
     month++;
     if (month>12)
     {
         month=1;
         year++;
     }
 }
}

我的代码适用于测试用例1和2,但是对于5的测试用例N,它输出错误而不是整数结果。预期的输出为9 9 7 9 9 8 8 9.如果有人可以帮助我弄清楚我的代码存在的问题,将不胜感激。谢谢

0 个答案:

没有答案