2017-06-21 186 views
0

你能告訴我這兩種邏輯的區別嗎?第一邏輯解決所有問題,而第二邏輯解決一半問題? 你能告訴我第一個邏輯不起作用嗎?有什麼區別

第一邏輯

 String out = "YES"; 
     for(int j = 0; j< size-1; j++) 
     { 
      long difference = Math.abs(array[j+1] - array[j]); 
      if(difference > value) 
      { 
       out = "NO"; 
       break; 
      }  
     } 

     System.out.println(out); 

第二邏輯

 String out = "NO"; 
     for(int j = 0; j< size-1; j++) 
     { 
      long difference = Math.abs(array[j+1] - array[j]); 
      if(difference <= value) 
      { 
       out = "YES"; 
      }  
      else 
      { 
       out = "NO"; 
       break; 
      } 
     } 
     System.out.println(out); 

這裏是我解決了這個問題 - >

您給出整數和你的數組需要確定任何兩個連續數組整數值的絕對差值是否爲在最D.

輸入:
輸入的第一行包含一個整數T,表示的測試用例的數量。你必須爲每個測試用例提供輸出。每個測試用例都包含數組的大小(N),必須檢查的絕對值差異(D)以及數組本身的值。 每個測試用例的第一行包含兩個整數N和D,分別表示數組的大小和D的值。 每個測試用例的第二行包含N個整數,它們被一個空格分開,並且是整數。

輸出:
對於每一個測試的情況下,打印YES如果任何兩個連續整數之間的絕對差爲最d,否則打印NO。

限制條件:
不會有超過1000個測試用例。陣列的大小也不會大於1000和d的值將是1和100之間的數組中的整數的值將是1和106

= T 之間

< = 103
= ñ< = 103
= d < = 100
=元素陣列的< = 106

第一邏輯解決所有的測試用例但第二邏輯只解決一半的測試用例,以便第一個邏輯失敗?

+1

第二個不會編譯。所以就是這樣。 –

+0

你在說什麼測試用例?如果你知道什麼樣的測試失敗了,你不知道第一個代碼缺乏什麼嗎?畢竟那是什麼測試用例。 –

+0

均順利編譯,唯一不同的是首先爲所有情況提供解決方案,而第二個僅爲半個情況提供解決方案 – hEmAnT

回答

0

這些都不將工作,因爲每個將只打印一行(這裏只有一個System.out.println(out),所以如果有一個以上的測試情況下,他們會失敗。


評論顯示經過編輯,他們'在外部循環中運行

如果數組中有單個項目,它將返回"NO",因爲這是默認值,即使沒有更大的差異對。

如果我們看到更多的周圍代碼 - size爲每個測試用例正確設置,它可能會有所幫助嗎?

+0

不是這樣的,他們在所有的測試用例中逐個測試它。 – hEmAnT

+0

@david代碼粘貼迭代在測試用例數組的**一個**上。該代碼可能在迭代測試用例的for循環中 – Nathan