比较三胞胎C#hackerrank改进我的解决方案

时间:2017-04-10 17:04:08

标签: c#

我一直在努力解决这个黑客行为问题(Compare the Triplets)而且我不知道我哪里错了。我的输出是正确的,但它没有通过所有hackerrank的测试用例。有什么建议?

问题:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    class Solution {

static void Main(String[] args) {
    string[] tokens_a0 = Console.ReadLine().Split(' ');
    int a0 = Convert.ToInt32(tokens_a0[0]);
    int a1 = Convert.ToInt32(tokens_a0[1]);
    int a2 = Convert.ToInt32(tokens_a0[2]);
    string[] tokens_b0 = Console.ReadLine().Split(' ');
    int b0 = Convert.ToInt32(tokens_b0[0]);
    int b1 = Convert.ToInt32(tokens_b0[1]);
    int b2 = Convert.ToInt32(tokens_b0[2]);
    // Write Your Code Here
    int aliceScore = 0;
    int bobScore = 0;


    if(a0 > b0 || a1 > b1 || a2 > b2)
    {
       aliceScore++;    
    }
    if(b0 > a0 || b1 > a1 || b2 > a2)
    {
        bobScore++;
    }
    if(a0 == b0 || a1 == b1 || a2 == b2)
    {
        aliceScore += 0;
        bobScore += 0;
    }

    Console.WriteLine(aliceScore +" " + bobScore);

}

}

8 个答案:

答案 0 :(得分:1)

尝试这个...

static List<int> compareTriplets(List<int> a, List<int> b) 
{
    int aliceScore=0, bobScore=0, totalTests=3;

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

        aliceScore += a[i] > b[i] ? 1 : 0;

        bobScore += a[i] < b[i] ? 1 : 0;
    }

    return new List<int> {aliceScore, bobScore};
}

答案 1 :(得分:0)

我想我看到了问题,您需要比较每个数据点并计算每个数据点的得分。因此,比较数据点0,然后数据点1,然后数据点2。

伪代码如下,尚未测试:

    if(a0 > b0)
    {
       aliceScore++;    
    }
    else if(b0 > a0)
    {
        bobScore++;
    }


    if(a1 > b1)
    {
        aliceScore++;
    }
    else if(b1 > a1)
    {
        bobScore++;
    }

    if(a2 > b2)
    {
        aliceScore++;
    }
    else if(b2 > a2)
    {
        bobScore++;
    }

答案 2 :(得分:0)

我认为这不是解决这个问题的正确方法。你应该遵循这些 下面给出的步骤。

        int[] Alice = { a0, a1, a2 };
        int[] Bob = { b0, b1, b2 };
        int alice = 0;
        int bob = 0;
        for (int i = 0; i < Alice.Length; i++)
        {
            if (Alice[i] > Bob[i])
            {
                alice++;
            }
            if (Alice[i] < Bob[i])
            {
                bob++;
            }
        }
        int[] result = { alice, bob };
        return result;

答案 3 :(得分:0)

GER提供了解决问题背后逻辑的步骤。理想情况下,您的解决方案应该能够满足阵列中为Alice或Bob提供的任何输入。假设我们有两个int类型的列表。

var a = new List<int> {10, 11, 12, 14, 45 };
var b = new List<int> {8, 15, 10, 12, 55 };

说列表“ a”代表爱丽丝的得分理赔,表“ b”代表鲍勃的得分。该解决方案需要比较任一列表中相同索引位置处的条目,即,从左至右,列表“ a”中的数字10位于索引0,列表“ b”中的数字8也位于索引0。处理比较任务的函数将接受两个列表作为输入,然后返回包含2个条目的列表。该函数的返回值将是Alice的得分和Bob的得分。请参阅下面的示例解决方案

void Main()
{
    var a = new List<int> { 10, 11, 12, 14, 45 };
    var b = new List<int> { 8, 15, 10, 12, 55 };

    var result = CompareScores(a, b);

    //Expected result is : 
    // Alice: 3
    // Bob: 2

    Console.WriteLine($"Alice score: {result.ElementAt(0)} Bob score: {result.ElementAt(1)}");
}

public List<int> CompareScores(List<int> alice, List<int> bob)
{
    var ScoreAlice = 0;
    var ScoreBob = 0;
    var i = 0;
    alice.ForEach(scoreAlice => {
        if(scoreAlice > bob.ElementAt(i))
        {
            ScoreAlice ++;
        }
        if(scoreAlice < bob.ElementAt(i))
        {
            ScoreBob ++;
        }
        i++;
    });
    return new List<int> {ScoreAlice, ScoreBob };
}

在我的解决方案通知中,我使用Linq在代表Alice的List上进行迭代,对于每个元素,我都会与Bob的列表进行比较,并使用“ i”的值来标识该元素。

答案 4 :(得分:0)

using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using System.Text;
using System;

class Solution {

    // Complete the compareTriplets function below.
    static List<int> compareTriplets(List<int> a, List<int> b) {
        int alice=0,bob=0;
        for(int i=0;i<a.Count;i++)
        {
            if(a.ElementAt(i)>b.ElementAt(i))
            {
                alice=alice+1;
            }
            else if(a.ElementAt(i)<b.ElementAt(i))
            {
                bob=bob+1;
            }
        }
        return new List<int> {alice,bob};

    }

    static void Main(string[] args) {
        TextWriter textWriter = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);

        List<int> a = Console.ReadLine().TrimEnd().Split(' ').ToList().Select(aTemp => Convert.ToInt32(aTemp)).ToList();

        List<int> b = Console.ReadLine().TrimEnd().Split(' ').ToList().Select(bTemp => Convert.ToInt32(bTemp)).ToList();

        List<int> result = compareTriplets(a, b);

        textWriter.WriteLine(String.Join(" ", result));

        textWriter.Flush();
        textWriter.Close();
    }
}

答案 5 :(得分:0)

类解决方案{

// Complete the compareTriplets function below.
static List<int> compareTriplets(List<int> a, List<int> b) {
    int A = 0;
    int B = 0;
    
    for(int i=0; i < a.Count; i++){
        if(a[i] > b[i]){
            A++;
        
        }else if(a[i] < b[i]){
            B++;
        }
    }
    return new List<int> {A,B};        
}

static void Main(string[] args) {
    TextWriter textWriter = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);

    List<int> a = Console.ReadLine().TrimEnd().Split(' ').ToList().Select(aTemp => Convert.ToInt32(aTemp)).ToList();

    List<int> b = Console.ReadLine().TrimEnd().Split(' ').ToList().Select(bTemp => Convert.ToInt32(bTemp)).ToList();

    List<int> result = compareTriplets(a, b);

    textWriter.WriteLine(String.Join(" ", result));

    textWriter.Flush();
    textWriter.Close();
}

}

答案 6 :(得分:0)

我认为这会奏效。

        List<int> res = new() { 0, 0 };

        for (int i = 0; i < a.Count; i++)
        {
            if (a[i] > b[i]) res[0]++;
            else if (a[i] < b[i]) res[1]++;
        }

答案 7 :(得分:0)

vector<int> compareTriplets(vector<int> a, vector<int> b)
{
    int testsubjects=0;
    int s=0;
    int d=0;
    for(int i=0;i<testsubjects;i++)
    {
        s+= a[i]>b[i] ? 1:0;
        d+=a[i]<b[i] ? 1:0;
    }
    vector<int> vect = vector<int> {s,d};
    return vect;
}