-1

私はマトリックスでプログラムをやろうとしています。4 つの数字では、最初の行列だけが 1 減ります。最初の行列が終了すると、2 番目の行列だけが 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

これを行うには、ネストされた 2 つのループが必要です。

#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 に答える