如何反转嵌套循环输出的位置?

时间:2018-12-03 11:19:02

标签: c loops nested-loops

我是C语言的初学者和大学新生。 我在这里需要进行测试,需要一些帮助。 我想制作一个显示有序数字的嵌套循环。像这样排序:

  • 1
  • 3 2
  • 4 5 6
  • 10 9 8 7
  • 11 12 13 14 15
  • 21 20 19 18 17 16
  • 22 23 24 25 26 27 28

    ... ... ...依此类推,具体取决于您输入的行数

我已经尝试制作粗略的试错测试代码:

int i;
int j;
int limit;
int number1 = 1;
int number2 = 3;
int spesial = 0;

printf("Input limit : ");
scanf("%d", &limit);

for (i=1;i<=limit;i++)
{
    for(j=1;j<=i;j++)
    {
        if (i%2==0)
        {
            printf("%d ", number2);
            number2--;
        }
        else
        {
            printf("%d ", number1);
        }
        number1++;

    }
    if (i%2==0)
    {
        number2=(i*6)-i+(spesial*1);
        spesial+=1;
    }
    printf("\n");
}

I managed to make it sorted to the 7th rows, but the rest are not..

请帮助... 我想知道我们是否真的可以像这样简单地控制输出的位置。 另外,对不起我的英语...我不是真的来自一个讲英语的国家,这是我第一次在这个网站上发帖/提问。 感谢您阅读这个冗长的问题,希望您有个美好的一天和美好的夜晚。

3 个答案:

答案 0 :(得分:1)

https://ideone.com/yCxpHo

#include <stdio.h>
#include <stdlib.h>

int main(void)

{
  int rows;
  int i, j;
  int n = 0;

  printf ("How many rows do you want? ");
  if (scanf("%d", & rows) != 1 || rows < 1) return EXIT_FAILURE;
  printf ("\n");

  for (i = 1; i <= rows; ++ i) {
    for (j = 0; j < i; ++ j) {
      printf ("%4d", n + (i % 2 == 0 ? i - j : j + 1));
    }
    printf ("\n");
    n = n + i;
  }

  return EXIT_SUCCESS;
}

答案 1 :(得分:1)

创建另一个将计算最大行数的函数(我称为lineMax)会更方便。

int lineMax(int num){
    int cnt=0;
    for (int i=1;i<=num;i++)
        cnt+=i;
    return cnt;
}

void main(){
    int i,j,limit;
    printf("Input limit : ");
    scanf("%d", &limit);

    for(i=1;i<=limit;i++){
        if(i%2==0){ //right to left
            for(j=lineMax(i);j>=lineMax(i-1)+1;j--)
                printf("%d ",j);
        }
        else{ //left to right
            for(j=lineMax(i-1)+1;j<=lineMax(i);j++)
                printf("%d ",j);
        }

        printf("\n");
    }
}

答案 2 :(得分:0)

您正在使用number1number2special做很多特殊情况。这不适用于较大的数字。

一种方法是计算count,它将为您提供从j的每个循环开始的值。 count += i,然后每次打印count -j

count = 0;
for (i=1;i<=limit;i++)
{
    count += i;
    for(j=0;j< i;j++)
    {
        printf ("%d ",count-j);
    }
    printf("\n");
}