C# c中的相应操作存在问题#

C# c中的相应操作存在问题#,c#,string,algorithm,data-structures,numbers,C#,String,Algorithm,Data Structures,Numbers,我对本例中的解决方案有问题,请告诉我操作(codeKata): 您有一个包含N个数字的字符串,每2个数字在一个操作之后(?)返回该字符串中的下一个数字。 编写一个函数,返回带有相应操作的新字符串: 1) 另外, 2) 减法 3) 乘法 4) 分部 因为 9-4=5-减法 4*5=20-乘法 5+20=25-相加 我的代码: int x = 0,add = 0, multi = 0, sub = 0, divi = 0, z = 0; var v = stringNumbers.Split('

我对本例中的解决方案有问题,请告诉我操作(codeKata):

您有一个包含N个数字的字符串,每2个数字在一个操作之后(?)返回该字符串中的下一个数字。 编写一个函数,返回带有相应操作的新字符串:

1) 另外,

2) 减法

3) 乘法

4) 分部

因为

  • 9-4=5-减法
  • 4*5=20-乘法
  • 5+20=25-相加

    我的代码:

    int x = 0,add = 0, multi = 0, sub = 0, divi = 0, z = 0;
    var v = stringNumbers.Split(' ').ToArray();
    string s = "";
    if (v.Length >= 3)
    {
        for (int i = 0; i < v.Length; i++)
            for (int j = i + 1; j < v.Length; j++)
                for (int k = j + 1; k < v.Length; k++)
                {
                    Console.WriteLine(k);
                    x = int.Parse(v[i]);
                    z = int.Parse(v[j]);
                    add = x + z;
                    multi = x * z;
                    sub = x - z;
                    divi = x / z;
    
                    if (add == int.Parse(v[k]))
                    {
                        s += "addition, ";
                    }
                    else if (sub == int.Parse(v[k]))
                    {
                        s += "subtraction, ";
                    }
                    else if (multi == int.Parse(v[k]))
                    {
                        s += "multiplication, ";
                    }
                    else if (divi == int.Parse(v[k]))
                    {
                        if (int.Parse(v[i]) != 0)
    
                            s += "division, ";
                    }
                    else
                    {
                        break;
                    }
                }
    }
    else
        return "";
    s = s.Remove(s.Length - 2, 2);
    return s;
    
    intx=0,add=0,multi=0,sub=0,divi=0,z=0;
    var v=stringNumbers.Split(“”).ToArray();
    字符串s=“”;
    如果(v.长度>=3)
    {
    对于(int i=0;i
我通过了样品测试,但这次没有。我不知道问题出在哪里

谢谢你的帮助!
这是我的第三篇文章,对我的错误表示歉意。

假设
v.length
5

您希望执行以下循环过程:

  • i=0,j=1,k=2
  • i=1,j=2,k=3
  • i=2,j=3,k=4
  • 但那不是你要做的。您的
    j
    k
    变化与
    i
    变化是半独立的

  • i=0,j=1,k=2
  • i=0,j=1,k=3
  • i=0,j=1,k=4
  • i=0,j=2,k=3
  • i=0,j=2,k=4
  • i=0,j=3,k=4
  • i=1,j=2,k=3
  • i=1,j=2,k=4
  • i=1,j=3,k=4
  • i=2,j=3,k=4
  • 要获得期望的结果,您应该只有一个循环。可以从循环变量派生其他值

    您可以从
    i
    导出
    j
    k
    ,如下所示:

    for (int i = 0; i < v.Length - 2; ++i) {
       int j = i + 1;
       int k = i + 2;
       ...
    }
    
    for (int k = 2; k < v.Length; ++k) {
       int i = k - 2;
       int j = k - 1;
       ...
    }
    

    无论哪种方式,如果(v.Length>=3)
    检查都是无用的。的
    已执行等效检查。我还建议对
    v
    的元素进行一次解析(在主循环之前),而不是重复解析。

    假设
    v.length
    5

    您希望执行以下循环过程:

  • i=0,j=1,k=2
  • i=1,j=2,k=3
  • i=2,j=3,k=4
  • 但那不是你要做的。您的
    j
    k
    变化与
    i
    变化是半独立的

  • i=0,j=1,k=2
  • i=0,j=1,k=3
  • i=0,j=1,k=4
  • i=0,j=2,k=3
  • i=0,j=2,k=4
  • i=0,j=3,k=4
  • i=1,j=2,k=3
  • i=1,j=2,k=4
  • i=1,j=3,k=4
  • i=2,j=3,k=4
  • 要获得期望的结果,您应该只有一个循环。可以从循环变量派生其他值

    您可以从
    i
    导出
    j
    k
    ,如下所示:

    for (int i = 0; i < v.Length - 2; ++i) {
       int j = i + 1;
       int k = i + 2;
       ...
    }
    
    for (int k = 2; k < v.Length; ++k) {
       int i = k - 2;
       int j = k - 1;
       ...
    }
    

    无论哪种方式,如果(v.Length>=3)
    检查都是无用的。的
    已执行等效检查。我还建议对
    v
    的元素进行一次解析(在主循环之前),而不是重复解析。

    类似的方法简单得多,并且在不使用循环层的情况下也可以实现相同的效果:

    public static string ProcessOperations(string numbers)
    {
        string[] numberArray;
        string returnValue = string.Empty;
    
        numberArray = numbers.Split(' ');
        for (int i = 0; i < numberArray.Length - 2; i++)
        {
            if (int.TryParse(numberArray[i], out int a) &&
                int.TryParse(numberArray[i + 1], out int b) &&
                int.TryParse(numberArray[i + 2], out int c))
            {
                if (a + b == c)
                    returnValue += "addition, ";
                else if (a - b == c)
                    returnValue += "subtraction, ";
                else if (a * b == c)
                    returnValue += "multiplication, ";
                else if (a / b == c)
                    returnValue += "division, ";
            }
        }
    
        returnValue = returnValue.TrimEnd(new[] { ',', ' ' });
    
        return returnValue;
    }
    
    这使用了一个运行到末端位置-2的单回路。然后,它将位置
    i
    i+1
    i+2
    处的项目解析为
    a
    b
    c
    )。然后,它检查哪个算术运算用于从
    a
    b
    计算
    c

    在返回之前有一个
    TrimEnd
    ,用于删除任何虚假的逗号和空格


    注意:没有错误检查,没有算术运算会给出结果。除法是整数除法,因此不适用于浮点数。

    类似的方法简单得多,并且在不使用循环层的情况下也可以实现同样的效果:

    public static string ProcessOperations(string numbers)
    {
        string[] numberArray;
        string returnValue = string.Empty;
    
        numberArray = numbers.Split(' ');
        for (int i = 0; i < numberArray.Length - 2; i++)
        {
            if (int.TryParse(numberArray[i], out int a) &&
                int.TryParse(numberArray[i + 1], out int b) &&
                int.TryParse(numberArray[i + 2], out int c))
            {
                if (a + b == c)
                    returnValue += "addition, ";
                else if (a - b == c)
                    returnValue += "subtraction, ";
                else if (a * b == c)
                    returnValue += "multiplication, ";
                else if (a / b == c)
                    returnValue += "division, ";
            }
        }
    
        returnValue = returnValue.TrimEnd(new[] { ',', ' ' });
    
        return returnValue;
    }
    
    这使用了一个运行到末端位置-2的单回路。然后,它将位置
    i
    i+1
    i+2
    处的项目解析为
    a
    b
    c
    )。然后,它检查哪个算术运算用于从
    a
    b
    计算
    c

    在返回之前有一个
    TrimEnd
    ,用于删除任何虚假的逗号和空格


    注意:没有错误检查,没有算术运算会给出结果。除法是整数除法,因此不适用于浮点数。

    我将尝试修复此除法。我将尝试修复此除法。