具有可变步长的 For 循环 - C

新手上路,请多包涵

我想使用具有可变步长的 for 循环,特别是我希望 for 循环中的 i 变量等于:

  1. 除了可以除以 3 之外的所有数字,所以:

我 = 1-2-4-5-7-8-10-11-13-14-16-17…

  1. 除了可以除以 32 之外的所有数字,所以:

我 = 1-5-7-11-13-17…

基本代码:

 #include <iostream>

int main()
{
    int N = 100;
    for ( int i=0; i<N; i++) { //<-----
        //instructions
    }
    return 0;
}

for 循环是否可行?

原文由 Fra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 692
2 个回答

您可以尝试使用三元运算符。它使您的代码的可读性更加困难(我认为,但有些人喜欢它),但是您将所有内容都放在了 for 语句中。

对于可以被3整除的数字,例如:

 for (int i = 1; i < N; i = (((i+1)%3 == 0) ? i+2 : i+1)) {
    //Instructions
}

而且,对于可以除以 3 和 2 的数字,您可以尝试以下操作:

 for (int i = 1;
 i < N;
 i = (i+1)%3 == 0 || ((i+1)%2) == 0 ?
     ((i+2)%3 == 0 || i%2 == 0 ?
        (i%3 == 0 || (i+1)%2 == 0 ? i+4 : i+3) : i+2 ) : i+1) {
    //Instructions
}

有关三元运算符的更多信息,请单击 此处

编辑 从评论中添加@AMA的建议(比我的简单)

 for (int i = 1;
     i < N;
     i = (i+1)%2 == 0
         ? (i+2)%3 == 0
             ? i+4
             : i+2
         : (i+1)%3 == 0
             ? i+2
             : i+1) {
    //Instructions
}

原文由 Leonardo Alves Machado 发布,翻译遵循 CC BY-SA 3.0 许可协议

for(int i = 0; i < N; i++)
{
    if(i % 3 == 0) // if(i % 3 == 0 || i % 2 == 0) // if(is_skippable(i))
        continue;
    //instructions
}

原文由 AMA 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏