2015-11-03 61 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