循环通过奇数和2

时间:2018-09-11 19:08:59

标签: c loops

在C语言中是否可以有一个快速的for / while循环来循环奇数和2?不使用数组。

所以我希望它循环遍历{1,2,3,5,7,9 ..}

4 个答案:

答案 0 :(得分:3)

当然。这是一种非常简单的方法。

for(int i=1; i<N; i++) {
    if(i>3) i++;
    // Code
}

更黑的变种:

for(int i=1; i<N; i+=1+(i>2)) {
     // Code
}

但是我认为在这种情况下,最易读的变量应该是这样的:

// Code for 1 and 2

// Then code for 3,5,7 ...
for(int i=3; i<N; i+=2) {
    // Code
}

答案 1 :(得分:0)

另一种选择确实使用数组,但无论序列中有多少个数字,都只使用一个很小的数组,该常量是两个元素的不变大小:

{
    int i;
    int  iray[] = {1, 2};
    int n = 15;

    for (i = 1; i < n; i += iray[i > 2]) {
        printf (" i = %d \n", i);
        // code
    }
}

产生:

i = 1
i = 2
i = 3
i = 5
i = 7
i = 9
i = 11
i = 13

将此替代方法扩展到其他序列

并且该替代方案可以扩展到具有相似性质变化的其他序列。例如,如果所需序列是

1, 2, 3, 5, 8, 11, ..

其中涉及序列的几个更改。从1开始,使用1的增量,然后在3处使用2的增量进行第一次增量更改,然后在5处使用3的增量开始第二次更改序列,可以进行以下修改

{
    int i;
    int  iray[] = {1, 2, 3};  // increment changes
    int n = 15;

    // calculate the increment based on the current value of i
    for (i = 1; i < n; i += iray[(i > 2) + (i > 3)]) {
        printf (" i = %d \n", i);
        // code
    }
    return 0;
}

会产生:

 i = 1
 i = 2
 i = 3
 i = 5
 i = 8
 i = 11
 i = 14

答案 2 :(得分:0)

另一个选择

for(int i=1;;++i) // you didn't specify a limit
{
    switch(i)
    {
        default:
            if(!(i&1))continue;
        case 1:
        case 2:
            DoSomething(i):
    }
}

答案 3 :(得分:0)

#include <stdio.h>

int main()
{
    for(unsigned x = 0; x < 10; x++)
    printf("%u%s element - %u\n",x + 1, !x ? "st" : x == 1 ? "nd" : x == 2 ? "rd" : "th", !x + x * 2 - (x >= 2));

    return 0;
}

!x + x * 2 - (x >= 2)中没有跳转计算,因此没有管道刷新。