2010/01/28

p006 Jolly Jumper

給一連串的數字,輸入的第一個數字n是代表總共有幾個數字,後面就逐一n個輸入數字。

輸出要判斷輸入的這n個數字從左至右或從右至左都一樣,兩兩相減之差是否能夠成為一個1到n-1的連續數列。

例如說輸入4 1 4 2 3就是一個Jolly Jump

4是代表4個數,1跟4差3,4跟2差2,3跟2差1,它們差剛好可以排成一個1 2 3的數列
也就是我們所謂的1到n-1的連續數列,

我一開始搞錯這題義連續出了十幾個WA還不知道為什麼....唉

/**
 * Time(ZeroJudge):452ms
 * Date: 2010-1-29
 * 
 * @author Kurorido
 */

import java.util.Scanner;

public class JAVA {
   
 public static void main(String[] args) {

  boolean debug = false;
  Scanner sc = new Scanner(System.in);
  
  while(sc.hasNext()) {
   
   if(debug)
    System.out.println("========case=======");
   
   int n = sc.nextInt();
   
   if(debug)
    System.out.println("n = " + n);
   
   boolean[] set = new boolean[n];
   
   if(n == 0 || n > 3000)
    break;
   
   int num1 = 0;
   int num2 = 0;

   num1 = sc.nextInt();
   
   for(int i = 1; i < n; i++) {
    
    num2 = sc.nextInt();
    
    if(debug) {
     System.out.println("num1 = " + num1);
     System.out.println("num2 = " + num2);
    }
    
    int diff = Math.abs(num2 - num1);
    
    if(debug)
     System.out.println( num2 + " - " + num1 + " diff = " + diff);
    
    if(diff < n && diff > 0) {
     set[diff] = true;
    }
    
    num1 = num2;
   }
   
   if(countTrue(set) == n -1)
    System.out.println("Jolly");
   else
    System.out.println("Not jolly");
  }
 }
 
 public static int countTrue(boolean[] set) {
  
  int count = 0;
  
  for(int i = 1; i < set.length; i++) {
   if(set[i] == true)
    count++;
  }
  
  return count;
 }
}

一直想試試看很快的那個IO跟parseInt...結果都不能用...導致了一堆RE= =

No comments:

Post a Comment