代码厨师初学者(主赛)

时间:2015-11-03 14:18:59

标签: java

  

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,因为他在游戏中获得了最大的领先优势(第1轮结束时为58)。   您的任务是帮助经理找到胜利者和获胜的领导者。你可以假设没有关系。

     

输入
  输入的第一行将包含一个整数N(N≤10000),表示游戏中的回合数。 2,3,......,N + 1行描述了N轮中两名球员的得分。第i + 1行包含两个整数Si和Ti,分别是第一轮和第二轮的得分。您可以假设1≤Si≤1000且1≤Ti≤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中得到了正确的输出,但代码厨师说错了答案。

3 个答案:

答案 0 :(得分:2)

立即突出的一件事是最后的println陈述。自flaglead合并后,您将打印一个整数而不是两个整数。正确的代码应该是:

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

在我看来,您应该尝试按预期逐行解析输入,而不是nextInt nextInt,因为这可能会导致未知的并发症。你应该阅读整行,然后对其进行标记并得到前两个整数。

此外,在线评委通常对课程和方法名称非常挑剔,因此请确保为自己的课程命名,例如在 HackerRank 上,您的课程必须命名为Solution使代码工作)。

最后,你如何处理领先的关系?在你的问题陈述中,它表示没有联系,但这是否意味着在回合中没有联系或者在领导中也没有联系?我的意思是这样的:假设玩家1赢得第一轮,领先1.然后玩家2赢得第二轮,领先1.你的旗帜应该是1或2?

答案 1 :(得分:0)

你为什么这样解决?请解释。代码主厨与您的编程有关吗?

我的解决方法是:

  1. 创建保存匹配项的助手类,其值为: Player1得分,Player2得分,得分差异。
  2. 制作一系列所述匹配并迭代它们以找到它 最大的价值。
  3. 现在你赢了比赛,去寻找赢得比赛的球员。
  4. 打印获胜的玩家和积分。

答案 2 :(得分:0)

您的输入似乎并不是总分,而是用新扫描替换最后一个分数。

我建议在循环之前声明变量score1score2,并将循环内的代码更改为:

score1 += in.nextInt();

等于

score1 = score1 + in.nextInt();

当然,score2也是如此。

在其网站上查看此可接受的解决方案,以获取完整的代码:

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

// edit:我认为你还应该在输出中的整数之间添加一个空格字符。否则输出将是“158”而不是“1 58”。