C#按顺序查找下一个X和上一个数字

时间:2010-10-04 07:40:58

标签: c# c#-4.0

我有一个数字列表,{1,2,3,4,...,End},其中指定了End。我想在列表中的给定数字Find周围显示最接近的X数字。如果x是奇数,我希望额外的数字大于一边。

示例(基本情况)

End: 6
X: 2
Find: 3

结果应为:{2,3,4}

另一个例子(绑定案例):

End: 6
X: 4
Find: 5

结果应为:{2,3,4,5,6}

又一个例子(奇数案例):

End: 6
X: 3
Find: 3

结果应为:{2,3,4,5}

我认为简单地找到一个开始和停止值会更容易,而不是实际生成列表,但我真的不在乎这种或那种方式。

如果重要的话,我正在使用C#4.0。

编辑:我可以想办法做到这一点,但如果是这样的话,它涉及的方式太多了。

if (Find == 1)
{
     Start = Find;
     Stop = (Find + X < End ? Find + X : End);
}
else if (Find == 2)
{
     if (X == 1)
     {
          Start = Find;
          End = (Find + 1 < End ? Find + 1 : End);
     }
     ...
 }

你可以希望看到它的发展方向。我假设我将不得不使用(X%2 == 0)进行奇数/偶数检查。然后有些人将less = Find - X/2more = Find + X/2绑定在一起。如果不是这样的话,我就无法找到最小的路径。

编辑II:我还应该澄清,我实际上并没有创建{1,2,3,4 ... End}的列表,但是我可能需要从Find-X / 2开始。

2 个答案:

答案 0 :(得分:3)

我意识到你正在学习,出于对此的尊重,我不会为你提供完整的解决方案。但是,我会尽力向你推动正确的方向。

通过查看您尝试过的解决方案,我认为您需要先找出所需的算法,然后再尝试编写可能会或可能不会解决问题的内容。正如你自己所说,为输入中的每个可能的排列编写一个if语句并不是一个可管理的解决方案。您需要找到一个足够通用的算法,您可以将其用于您获得的任何输入,并且仍能获得正确的结果

基本上,在您能够编写有效的解决方案之前,您需要回答两个问题。

  1. 如何找到要返回的列表的下限?
  2. 如何找到要返回的列表的上限?
  3. 考虑到示例基本情况,您知道给定参数X包含一个数字,告诉您应显示Find周围的数字。因此,您需要在X的两边平均分配Find

    因此:

    1. 如果输入X = 4且Find = 3,则下限为3 - 4/2 Find - X/2
    2. 上限为3 + 4/2 Find + X/2
    3. 首先编写一个运行并适用于基本案例的程序。 完成后,坐下来弄清楚如何找到更复杂案例的上限和下限。

      祝你好运!

答案 1 :(得分:2)

您可以查看扩展方法。跳过并采取。

x.Skip(3).Take(4);

这将有助于你在尝试做什么