尝试从给定输入中找到最大的负数和最小的正数

时间:2019-12-02 07:44:31

标签: c#

我试图建立一个算法,该算法的输入是10个数字(正数和负数),而输出是最小的正数和最大的负数。 我会为最小的正面问题找到正确的答案,但对于最大的负面问题不会给出正确的答案。 代码和输出被插入。

code

output

3 个答案:

答案 0 :(得分:2)

如果您有一个收藏集,例如int[] numbers,则可以在 Linq 的帮助下查询

  using System.Linq;

  ...

  int[] numbers = ...

  ...

  // Either biggest negative or 0 (if we don't have any negative values)
  int biggestNegative = numbers
    .Where(x => x < 0)
    .DefaultIfEmpty() // <- we don't want exception on empty input
    .Max(); 

  // Either smallest positive or 0 (if we don't have any positive values) 
  int smallestPositive = numbers        
    .Where(x => x > 0)
    .DefaultIfEmpty()  // <- we don't want exception on empty input
    .Min();

如果您希望在for循环中计算值:

  int biggestNegative = 0; 
  int smallestPositive = 0; 

  for (int i = 0; i < 10; ++i) {
    ...
    // Simplest, you may want to check user input 
    int value = int.Parse(Console.ReadLine());

    ...
    if (value > 0) 
      smallestPositive = smallestPositive == 0 
        ? value
        : Math.Min(smallestPositive, value);
    else if (value < 0) 
      biggestNegative = biggestNegative == 0 
        ? value
        : Math.Max(biggestNegativee, value);  
  }

让我们打印出值:

Console.WriteLine(
  $"Biggest negative: {(biggestNegative == 0 ? "???" : biggestNegative.ToString())}");

Console.WriteLine(
  $"Smallest positive: {(smallestPositive == 0 ? "???" : smallestPositive.ToString())}"); 

答案 1 :(得分:0)

if (num>negMax)

在这种情况下有错误。由于您的初始negMax值为0,因此不会满足任何负数,因此negMax值将永远不会更新。

答案 2 :(得分:0)

您正在将negMax初始化为0。

没有大于0的负数。

根据您要完成的工作,可以执行以下操作之一:

  • negMax初始化为int.MinValue

如果可以保证至少有一个负数,这是可以的,因为可以保证第一个负输入等于或大于。如果不能保证负输入,则无法确定是否有负输入,并且输出可能最终不正确。

  • 修改为negMax分配新值的条件

您可以改为将为negMaxif (num > negMax || negMax >= 0)分配新值的条件。

由于通常不将0视为负数(如果这样,则可以使用任何正数来初始化negMax),因此,如果输出结束,您将知道不存在负数最高为0。

要对posMin执行相同操作,您必须将其初始化为小于0的值,并调整if条件,以便为该变量相应地赋值。

或者,您也可以将negMaxposMin声明为int?并检查null而不是>= 0

如果选择这种方式,则可以检查变量和输出的值,例如,没有输入负数或没有正数,而不是输出所选的任何占位符。