查找没有数组的第二大数字

时间:2016-11-28 20:07:22

标签: c# algorithm

我必须制作程序,从用户输入返回第二高的数字。

用户可以输入最小 2 数字和最大 10 数字。用户只能输入整数(不是小数),以停止我使用0的程序。

我的问题是:如果我输入 1,2,2,0 ,则输出 2 >正确,输出1.

以下是我目前正在做的事情:

static void checking(double n, ref double max, ref double smax)
{
    if (n > max)
    {
        smax = max;
        max = n;
    }
    else if (n > smax)
    {
        smax = n;
    }
}
static void Main(string[] args)
{
    double n = 1, max = -99999999, smax = -99999999, ISsmaxrepeating = 0;
    int i = 0;

    while (n != 0 && i < 10)
    {
        Console.WriteLine("Input number");
        n = double.Parse(Console.ReadLine());
        if (n % 1 == 0)
        {
            checking(n, ref max, ref smax);
            i++;
        }
        else
        {
            smax =0;
            break;
        }
    }
    if (smax != 0) 
    {
        Console.WriteLine("secondmax is {0}", smax);
    }
    else
    {
        Console.WriteLine("error");
    }

    Console.ReadLine();
}

以下是一些测试用例:

示例1。:

  

输入: 10 5 -4 8 5 0

     

输出 8

示例2。:

  

输入: 5 5 5 5 0

     

输出“错误”

示例3。:

  

输入: 1 0

     

输出“错误”

示例4。:

  

输入: 1 2 3 4 5 6 7 8 9 10

     

输出 9

3 个答案:

答案 0 :(得分:2)

如果您已经拥有它,请忽略它:

...
while (n != 0 && i < 10)
{
    Console.WriteLine("Input number");
    n = double.Parse(Console.ReadLine());
    if (n % 1 == 0)
    {
        if(n != max && n != smax)
            checking(n, ref max, ref smax);

        i++;
    }
    else
    {
        smax =0;
        break;
    }
}
...

顺便说一下,我不相信你试图处理错误案例的方式。

答案 1 :(得分:1)

最终节目:)

static void checking(double n, ref double max, ref double smax)
    {
        if (n > max)
        {
            smax = max;
            max = n;
        }
        else if (n > smax)
        {
            smax = n;
        }
    }
    static void Main(string[] args)
    {
        double n = 1, max = Double.MinValue, smax = Double.MinValue;
        int i = 0, stopInput = 0;

        while (n != 0 && i < 10)
        {
            Console.WriteLine("Input number");
            n = double.Parse(Console.ReadLine());
            if (n % 1 == 0 && n !=0) //this (n % 1 == 0) part checks if number is not decimal
            {
                if (n != max && n != smax)
                    checking(n, ref max, ref smax);
                i++;
            }
            else
            {
                break;
            }

        }
        if (stopInput ==1 && smax != Double.MinValue) 
        {

            Console.WriteLine("secondmax is {0}", smax);

        }
        else
        {
            Console.WriteLine("error");
        }

        Console.ReadLine();


    }

答案 2 :(得分:0)

首先,检查方法的完整代码:

private static void checking(double n, ref double max, ref double smax)
    {
        if (n > max)
        {
            smax = max;
            max = n;
        }
        // Extra check added here
        else if (n > smax && n != max)
        {
            smax = n;
        }
    }

我用几个输入(5,5,5,0和1,2,1,0)对它进行了测试,它表现得如预期的那样(&#34; 1&#34;在第二种情况下,&#34;错误&#34;在第一个)。

此外,您的n % 1 == 0检查是一件非常奇怪的事情;我建议你改变一下,或者添加一条评论来解释为什么你要为读者做这件事。益处。