首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历奇数和2

问循环遍历奇数和2
EN

Stack Overflow用户
提问于 2018-09-12 03:08:59
回答 4查看 225关注 0票数 0

在C中有没有可能有一个快速的for/while循环来循环奇数和2?而不使用数组。

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

EN

回答 4

Stack Overflow用户

发布于 2018-09-12 03:13:05

当然了。这里有一个非常简单的方法。

代码语言:javascript
复制
for(int i=1; i<N; i++) {
    if(i>3) i++;
    // Code
}

一个更有黑客色彩的变体:

代码语言:javascript
复制
for(int i=1; i<N; i+=1+(i>2)) {
     // Code
}

但我认为在这种情况下,最具可读性的变体应该是:

代码语言:javascript
复制
// Code for 1 and 2

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

Stack Overflow用户

发布于 2018-09-12 03:45:32

另一种选择是使用数组,但只使用一个小数组,它是两个元素的恒定大小,而不管序列中有多少个数字:

代码语言:javascript
复制
{
    int i;
    int  iray[] = {1, 2};
    int n = 15;

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

这会产生:

代码语言:javascript
复制
i = 1
i = 2
i = 3
i = 5
i = 7
i = 9
i = 11
i = 13

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

并且该替代方案可以扩展到存在类似性质的改变的其他序列。例如,如果所需的序列是

代码语言:javascript
复制
1, 2, 3, 5, 8, 11, ..

这涉及序列中的几个变化。从1开始使用增量1,然后是从3开始的第一个增量变化,其中使用增量2,然后是从5开始的序列中的第二个变化,其中使用增量3,您可以进行以下修改。

代码语言:javascript
复制
{
    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;
}

这将产生以下结果:

代码语言:javascript
复制
 i = 1
 i = 2
 i = 3
 i = 5
 i = 8
 i = 11
 i = 14
票数 0
EN

Stack Overflow用户

发布于 2018-09-12 04:14:56

另一种选择

代码语言:javascript
复制
for(int i=1;;++i) // you didn't specify a limit
{
    switch(i)
    {
        default:
            if(!(i&1))continue;
        case 1:
        case 2:
            DoSomething(i):
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52282704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档