c# - 从范围内的起始索引向上和向下计数的循环

标签 c# for-loop math iteration pseudocode

我在开发一个从给定整数 (start) 开始,然后在给定范围内从该起点向上向下计数的 for 循环时遇到问题(最小最大)。我希望结果按到给定起点的距离排序。如果 for 循环不是这里的正确工具,我愿意接受其他建议!

由于这很难解释,我在下面举了一个例子:

var start = 4;
var max = 10;
var min = 0;
var stepSize = 1;
for(var i=startIndex; i>=min && i<=max; ???) {
  Console.WriteLine(i)
}

结果应该是这样的:

4 5 3 6 2 7 1 8 0 9 10

对我来说真正棘手的部分是交替必须停止以达到最大值 10 并且同时不低于 0 的结尾。

我开始试验并找到了一个适用于第一位的解决方案:

const int start = 4;
const int stepSize = 1;
    
for (var (i,j,k) = (start,1,5); Math.Abs(j)<=11; k=(k+j),j=-j-Math.Sign(j)*stepSize,i=(k+(start-5))%11) {
  Console.WriteLine(i);
}

这对于需要交替的第一部分工作正常,但一旦交替需要停止,它就会中断。这个实验的结果是:

4 5 3 6 2 7 1 8 0 9 -1

最佳答案

这是一个 for 循环,但就像其他人已经提到的那样,我认为其他结构更适合您的任务:

  public static void Main() {
    int start = 4;
    int max = 10;
    int min = 0;
    int stepSize = 1;
    for(int i=start, j=start; i>=min || j<=max; i-=stepSize, j+=stepSize) {
      if (i==start) {
        Console.Write(i + " ");
      }
      else {
        if (j <= max) {
          Console.Write(j + " ");
        }
        if (i >= min) {
          Console.Write(i + " ");    
        }        
      }      
    }
  }

关于c# - 从范围内的起始索引向上和向下计数的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72735081/

相关文章:

c# - 如何开始在WebMatrix网站上使用OpenID/OAuth?

python - 如何在 Python 中不使用范围创建列表(For 循环)?

python - 加倍二进制数

java - 整数时间间隔

algorithm - 是否存在适用于特定语言的任意精度算术的通用实现策略?

c# - 使用语句不能正常工作

c# - 升级到 .Net 4.0 后出现 AccessViolationException

c# - 如何将计算机音频传递给程序以进行可视化?

excel - 复制粘贴宏正在诱导 'grouped' -工作表功能?

javascript - For 循环 api 获取天气描述