【问题标题】:A better way to implement this for loop in C在 C 中实现这个 for 循环的更好方法
【发布时间】:2015-01-26 11:41:08
【问题描述】:

我需要以

之类的格式列出从 1 到 x 的数字

2,1,4,3,6,5,8,7 ......

我想到了一个像

这样的循环
for(i =1; i <j+1; i=i+2)
{
    if (i < j)
        printf("%d ", i);

    printf("     %d \n", (i-1));
}

这似乎很原始。

在我的系统中,在某些情况下,我必须按升序(0、1、2、3、4、...)访问数字,在某些情况下,我必须按上述顺序访问数字.

我想只是根据情况改变for循环的样式。

你能建议一个更好的方法来实现这个循环吗?

谢谢

【问题讨论】:

  • 我真的很困惑。您需要像 1,2,3,4,5 这样的连续数字吗?还是需要按 2,1,4,3,6,5,8,7 的顺序排列?
  • 我需要按2,1,4,3,6,5这样的顺序访问...
  • 你确定\nfor里面吗?
  • 我刚刚写了一个示例代码来打印数字,我想要测试的只是for循环。

标签: c loops for-loop


【解决方案1】:
for(i=2; i<=j; i=i+2)
    printf("%d %d", i, i-1);

【讨论】:

  • 只有当 j 是偶数时才有效,如果 j 是奇数,我们会跳过最后一个数字
  • @user2003172 所以在那里添加对该边缘情况的检查。这有什么问题?
【解决方案2】:
int i, x;
printf("input x : ");
scanf("%d", &x);
for(i=1; i <= x; ++i){
    printf("%d ", i & 1 ? i+1 : i-1);
}
printf("\n");

【讨论】:

    【解决方案3】:

    循环可以用多种方式编写。比如下面这种方式

    #include <stdio.h>
    
    int main(void) 
    {
        int x;
    
        scanf( "%d", &x );
    
        for ( int i = 1, j = 1; i <= x; i++, j = -j )
        {
            printf( "%d ", i + j );
        }
        puts( "" );
    
        return 0;
    }
    

    如果输入10那么输出将是

    2 1 4 3 6 5 8 7 10 9
    

    【讨论】:

    • 当 x 为 5 时,o/p 为 2 1 4 3 6 ,逻辑似乎跳过最后一个奇数。
    • @user2003172 你需要最后一个值正好是 x 吗?
    【解决方案4】:

    如您所愿,请使用“\n”。并使用类似这样的代码。你会像你问的那样认真。但要小心“\n”..

     Int a=0;
        for(i=1;i<n;i++){
              a=a+1;
              if(a%2==1){
                  printf("%d \n",i+1);
              }else{
                   printf("%d \n",i-1);
              }
    }
    

    【讨论】:

      【解决方案5】:

      如果循环中有一段代码需要为列表中的每个值运行一次,则可以使用以下代码在每次迭代中生成列表中的一项。这样可以防止重复。

      int i, j = 10;
      for (i = 2; i <= j; i += -1 + 4 * (i%2)) {
          printf("%d, ",i);
      }
      

      【讨论】:

      • 这似乎是一个很好的解决方案,但如果 J 是奇数,我们将错过打印最后一个数字。
      • 你能举例说明你的意思吗?它对我来说很好。
      • j = 10 o/P : 2,1,4,3,6,5,8,7,10,9 如果 J=11 O/P: 2,1,4,3, 6,5,8,7,10,9
      【解决方案6】:

      一个简单的奉献

      int i, x;
      scanf("%d", &x);
      
      // Loop from 1 to the largest even number <= x
      for(i = 1; i <= (x & ~1); i++) {
        printf("%d ", i - 1 + 2*(i%2));
      }
      if (i <= x) {
        printf("%d ", i);
      }
      printf("\n");
      

      【讨论】:

        【解决方案7】:

        您可能想尝试使用数组和初始化 for 循环,如下所示:

        int array[size];
        
        int n;
        for(n = 0; n < size; n++){
          array[n] = n;
        }
        

        然后你可以像这样进入数组:

        前进两个;打印。 回一个;打印;

        等等

        一些代码可能如下所示:

        int i = 0; //Which can be changed based on starting array number, etc.
        while(i < size);
          printf("%d ", array[i]);
          if(i % 2 == 0){
            i--;
          } else {
            i += 3;
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-04
          • 1970-01-01
          • 1970-01-01
          • 2011-08-11
          相关资源
          最近更新 更多