2016-11-29 74 views
-1

問題簡單的程序,但無法得到它的權利

烏龜長壽(繁榮)。即使不朽,島上的海龜也是 。此外,他們是無性的,並且他們每年至多給一個孩子出生 。除此之外,他們什麼都不做。他們 永遠不會離開他們的熱帶天堂。

Zanzi酒吧,桑給巴爾島上的第一隻烏龜,有一個進一步的活動:它 跟蹤島上的海龜數量。每個新年的 海龜的日子,並寫在一個小的 小冊子的總數。多年以後,這本小冊子包含一個不減少的整數序列,從一個或多個開始。 (從桑給巴爾的美麗的海灘雞蛋新興 後,花了贊齊一段時間,依靠自己的力量 開始一個家庭。)

一天贊齊意識到,它也可能是龜 從國外來桑給巴爾的情況下,乘船或飛機。現在它想知道許多居民不是在桑給巴爾出生的。不幸的是, 只能從小冊子的序列中導出一個下限。 實際上,如果一年中的海龜數量比前一年的海龜數量多一倍以上,則必須通過導入完全解釋差異。

只要桑給巴爾有1000000只海龜,島上全部被海龜覆蓋着 ,生殖和進口都會停止。請幫助Z子, !如上所述,編寫一個計算程序,用於計算進口海龜的下限,給定序列。

輸入

輸入開始與含有一個整數T(1≤T≤13)時, 多的測試用例的線。然後對於每個測試用例:

一行包含一系列以空格分隔的正整數 (≤1000000),非遞減,從一個或多個開始。對於 便利性,將單個空格和0附加到 序列的末尾。

輸出

對於每一個測試的情況下,輸出包含單個整數一個線: 下界不是天生桑給巴爾海龜的數量。

See question and sample input and output here

我的做法

public Zanzibar() { 

    Scanner scan = new Scanner(System.in); 
    int iterations = scan.nextInt(); 

    for (int i = 0; i < iterations; i++) { 

     int previous = -1; 
     int current = -1; 
     int lower = 0; 

     while (true) { 

      if (current != -1) 
       previous = current; 

      current = scan.nextInt(); 

      if (current == 0) 
       break; 

      if (current > 2 * previous && previous != -1) 
       lower += current - previous; 
     } 
     System.out.println(lower); 
    } 
} 

我想我理解這個問題是錯誤的。我應該不斷加入下限,還是應該找到兩年之間最大的差距?此外,我不明白如何輸入1 100 0產生輸出98(從鏈接)。它不是99嗎?

+1

呃,能不能告訴我們關於這個世界和一切的故事,請給出一個問題陳述? –

+0

@ThomasWeller這是一個挑戰,OP試圖解決這個問題是理解這個問題的一部分,所以他無法從這個問題中解脫出來。也許他的問題本身就是題外話題? – Gabriel

+0

另外:大部分似乎從鏈接的網站引用。您可能需要使用引用標記來表明。 –

回答

2

這是問題二傳手要我們明白:

爲每個測試用例的初始1意味着島上的初始羣體總是1

因此,對於像1 1 1 0輸入,這意味着即:

最初的人口是1。然後在第二年初,人口仍然是1。在第三年初,人口仍然是1

至於你提到的輸入的疑問:1 28 0,這意味着:

在第2年開始,人口28,而這可能是最大的2,作爲唯一的烏龜能最多生了一隻烏龜。所以,這意味着很顯然,至少有(28-2) = 26海龜遷移!

希望它可以幫助...

編輯:這是算法:

測試用例的每一行執行以下操作:

  • 設置initial1migrated0
  • 從行中的第二個數字開始讀取,直到我們遇到一個0

    1. 如果current數大於2*initialmigrated = migrated + (current - 2*initial)
    2. 否則:什麼也不做
    3. 設置initialcurrent
  • 打印migrated

編輯-2:

下面是JAVA實現:

import java.util.*; 
class Main { 
    public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int iterations = scan.nextInt(); 
    int i = 0; 
    int len,x; 
    int j,initial; 
    long migrated; 
    int arr[] = new int[1000005]; 
    while(i<iterations) 
    { 
     len = 0; 
     while(true) 
     { 
     x = scan.nextInt(); 
     if(x==0) 
      break; 
     arr[len++] = x; 
     } 
     initial = arr[0]; 
     migrated = 0; 
     j = 1; 
     while(j<len) 
     { 
     if(arr[j]-(2*initial)>0) 
     { 
      migrated += arr[j]-(2*initial); 
     } 
     initial = arr[j]; 
     j++; 
     } 
     System.out.println(migrated); 
     i++; 
    } 
    } 
} 

輸入:

3 
1 100 0 
1 1 1 2 2 4 8 8 9 0 
1 28 72 0 

輸出:

98 
0 
42