2015-11-03 64 views
-3

Siruseri體育俱樂部組織每年的檯球比賽,其中Siruseri的前兩名球員互相對抗。 Siruseri體育俱樂部經理決定加入他自己的想法。在他的版本中,每輪結束時都會計算領隊和當前領導。一旦所有回合結束,在比賽任何回合結束時擁有最高領先優勢的玩家均被宣佈爲優勝者。代碼廚師初學者(主角遊戲)

的雙方球員,領導者和每一輪爲這場比賽後,領先總成績下面給出:

Round   Player 1   Player 2  Leader  Lead 
    1    140    82  Player 1  58 
    2    229    216  Player 1  13 
    3    319    326  Player 2  7 
    4    431    432  Player 2  1 
    5    519    522  Player 2  3 

本場比賽的獲勝者是玩家1,因爲他有最大的鉛(58比賽結束時1)。 你的任務是幫助經理找到勝利者和獲勝的領導。你可能會認爲那是沒有關係的。

輸入
輸入的第一行將包含一個整數N(N≤10000),表示遊戲中的回合數。 2,3行,...,N + 1描述了N輪中兩名選手的得分。第i + 1行包含兩個整數Si和Ti,分別是玩家1和玩家2在第一輪中的得分。你可以假設1≤硅≤1000和1≤鈦≤1000

輸出
你的輸出必須由含有兩個整數W上的單條線和L,其中W爲1或2並指示贏家和L的是贏家獲得的最大領先優勢。

我的代碼:

import java.util.Scanner; 

class billardsDemo { 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     int rounds = in.nextInt(); 
     int i = 0; 
     int lead = 0; 
     int flag = 0; 
     while (i < rounds) { 
      int score1 = in.nextInt(); 
      int score2 = in.nextInt(); 
      if (score1 > score2 && score1 - score2 > lead) { 
       flag = 1; 
       lead = score1 - score2; 
      } else if (score2 > score1 && score2 - score1 > lead) { 
       flag = 2; 
       lead = score2 - score1; 
      } 
      i++; 
     } 
     System.out.println(flag +" "+ lead); 
     in.close(); 
    } 
} 

我得到在Eclipse中正確的輸出,但代碼廚師說,錯誤的答案。

回答

0

看來你的輸入並不總分,而是用新的掃描取代最後一個分數。

我建議聲明變量score1score2循環之前和改變代碼內循環到:

score1 += in.nextInt(); 

其等於

score1 = score1 + in.nextInt(); 

這同樣適用於score2,的課程。

查看他們的網站這個接受的解決方案的完整代碼:

https://www.codechef.com/viewsolution/8684978

//編輯:我想你也應該添加在輸出的整數之間的空格字符。否則,輸出將是「158」而不是「1 58」。

+0

如果您遇到這種情況,您可以隨時點擊問題頁面上的「所有提交」按鈕,然後根據您的語言對接受的答案進行排序。另外,如果您在問題的頁面上向下滾動到「編輯」,還有一個鏈接可供進一步解釋。在這種情況下,我發現codechef的解釋有些誤導,並且似乎對這個任務有相當多的煩惱。不知道他爲什麼會使用數組或模數來完成這個任務... –

+0

是的,這個問題沒有被正確解釋。 – unicorns21

2

立即脫穎而出的一件事就是您最後的聲明println。由於組合了flaglead,因此您正在打印一個整數而不是兩個整數。正確的代碼應該是:

System.out.println(flag + " " + lead); 

在我看來,你應該嘗試通過行預期,不nextInt通過nextInt,因爲這可能導致未知的併發症解析輸入線。你應該讀完整行,然後標記它並獲得前兩個整數。

此外,在線法官通常是有關類和方法的名稱很挑剔所以一定要確保你的名字你的班級,他們怎麼想你(例如在HackerRank你的類必須被命名爲Solution的代碼工作)。

最後,你如何處理領導關係?在你的問題陳述中,它表示沒有關係,但這是否意味着全面無關聯或者沒有關係在領導中?我的意思是這樣的:假設玩家1以1領先贏得第一輪。然後玩家2以1領先贏得第二輪。你的國旗應該是1還是2?

+2

@vojta所以他打印標誌+「」+鉛。如果標誌是1,並且lead是3,可以說,打印的輸出將是13.當法官試圖解析他的輸出時,它不會解析1和3,而是解析13.需要在1和3之間有一個空格3,因爲按照他的輸出約束,它構成兩個不同的整數。 –

+0

@EugenHotaj對不起,我的失明......你說得對。我會盡快答覆你的答案。抱歉。 – vojta

0

你爲什麼這樣解決它?請解釋。代碼廚師和你的編程有關係嗎?

我的解決方式是這樣的:

  1. 創建舉行比賽,與值輔助類: PLAYER1得分,Player2得分,在得分差。
  2. 創建一個所述匹配的數組,然後重複他們以找到最大的值 。
  3. 現在你有勝利的比賽,去找到贏得比賽的球員。
  4. 打印獲勝球員和積分。
+0

他們的解決方案基本上是在執行步驟2-4而不必使用中間數組(使用較少的內存)。沒有理由跟蹤數組中的所有分數。你只需要跟蹤當前的領先/領先分數。在線評委通常也只限於一個班級,所以你通常不能使用輔助班。 – FriedSaucePots

+0

是的,謝謝你指出。如果你可以使用一個班級,那就必須是這樣。不知道爲什麼你會想在這種情況下使用Java,非常OO。 – Flummox