可以在单个循环中抓取嵌套循环吗?

时间:2014-11-28 11:45:19

标签: c++ c

以下是代码:

#include <stdio.h>
int main() {
    int i, j;
    for(i = 0; i < 10; i++) {
        for (j = 0; j < i; j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

上面的代码可以在一个单独的循环上循环吗? (虽然这对我没用。)

#include <stdio.h>
int main() {
    int i, j;
    for (i = 0, j = 0; i < 10, j < i; i++, j++){
        printf("*");
    }
    printf("\n");
    return 0;
}

6 个答案:

答案 0 :(得分:2)

是的,这是可能的,但您应该查看不同的运营商所做的事情(并考虑您的代码应该做什么)。

for (int i = 10; i <= 100; i++) {
    if (i % 10 <= i / 10) {
        printf("*");
    }

    if (i % 10 == 0) {
        printf("\n");
    }
}

答案 1 :(得分:1)

不明智。您希望为j的每个值循环遍历i的每个值,这意味着嵌套循环。您的第二个示例将在每次迭代后递增ij,这是非常不同的。

原则上,您可以将单个变量从0循环到(至少)45,然后进行一些算术以从中找到ij的值;但这会更难以遵循,而且可能效率较低,所以我不会建议这样做。

答案 2 :(得分:0)

虽然您的条件部分不正确,但您可以使用逗号运算符进行此类操作。

应该是

for (i = 0, j = 0; i < 10 && /* perhaps || here*/ j < i; i++, j++){

答案 3 :(得分:0)

你可以这样写,但不可读。

#include <stdio.h>
int main() {
  int i, j;
  for(i=0, j=0; j<i? :(printf("\n"), j=0, i++, i<10); j++) {
    printf("*");
  }
  return 0;
}

答案 4 :(得分:0)

尝试一下,它会正常工作,无需任何额外的迭代。

int count=1,tmp=1;
for (int i = 1; i <= 10; i++) 
{
    printf("*");
    if (count == i) {
        printf("\n");
        tmp++;
        count+=tmp;
    }
}

答案 5 :(得分:0)

#include <stdio.h>
int main() {
    int i = 10, j = 0, k = 1; 
    while(j++ < i)
        (j == k && j <i) ? (printf("\n"),k+=1,j=0):printf("*");
    return 0;
}