-1

我正在尝试用矩阵做一个程序。在四个数字中,只有第一个减1。当第一个矩阵完成时,只有第二个矩阵减1。然后到最后。不允许使用 0 号。

例如,当我运行代码时,需要返回这个:

[2][1][3][3]
[1][1][3][3]
[1][3][3]
[3][3]
[2][3]
[1][3]
[3]
[2]
[1]

但是这段代码并没有发生这种情况:

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

int main()
{
    int fila[4], var;

    for (var=0;var<4;var++) {
        fila[var]=0;
        srand(rand());
        fila[var]=rand()%3+1;
        printf("[%d]",fila[var]);
        fila[0]=fila[0]-1;
    }
    system("pause>NULL");


    while(fila[0]>0)
    {
        printf("[%d][%d][%d][%d]\n",fila[0],fila[1],fila[2],fila[3]);
        fila[0]--;
        system("pause");
    }

    fila[1]=fila[1]-1;

    while(fila[1]>0)
    {
        printf("[%d][%d][%d]\n",fila[1],fila[2],fila[3]);
        fila[1]--;
        system("pause");
    }

    fila[2]=fila[2]-1;

    while(fila[2]>0)
    {
        printf("[%d][%d]\n",fila[2],fila[3]);
        fila[2]--;
        system("pause");
    }

    fila[3]=fila[3]-1;

    while(fila[3]>0)
    {
        printf("[%d]\n",fila[3]);
        fila[3]--;
        system("pause");
    }

    return 0;
}

我错过了什么?谢谢。

该代码打印:

[2][1][2][1]
[1][1]
4

2 回答 2

1

您需要两个嵌套循环来执行此操作:

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

int main(void) {
    int fila[4], i, j;
    srand(rand());
    for (i=0;i != 4; i++) {
        fila[i]=rand()%3+1;
    }
    for (i=0 ; i != 4 ; fila[i]--, i += (fila[i] == 0)) {
        for (j = i ; j != 4 ; j++) {
            printf("[%d] ", fila[j]);
        }
        printf("\n");
    }
    return 0;
}

外部循环迭代直到你到达fila; 内循环打印fila从 的索引开始的剩余元素i

请注意,您不应该在循环中重新播种srand- 您只在循环之前执行一次。

这是ideone 上该程序的链接

于 2012-05-26T01:59:39.683 回答
0

你想要的看起来像这样:

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

int main()
{
  int arr[4];
  int i;
  for(i = 0; i < 4; i++) {
    arr[i] = (rand() % 3) + 1;
  }
  for(i = 0; i < 4; i++) {
    while(arr[i]) {
      int j;
      for(j = i; j < 4; j++) {
        printf("[%d]", arr[j]);
      }
      printf("\n");
      arr[i]--;
    }
  }
  return 0;
}

注意嵌套循环。特别是,内部 for 循环允许您打印j矩阵的条目,而无需再次复制/粘贴该代码——您可以消除大量冗余。

于 2012-05-26T02:05:53.117 回答