1

さて、このようにらせん状に配列を埋めるプログラムを実行する必要があります

1  2  5  10 
4  3  6  11 
9  8  7  12 
16 15 14 13 

中心から始まる通常のスパイラルとは違うので、苦労しています。データが保存される場所の位置は次のようにする必要があります

array[0] [0] 
array[0] [1] 
array[1] [1] 
array[1] [0] 


array[0] [2] 
array[1] [2] 
array[2] [2]
array[2] [1] 
array[2] [0] 

array[0] [3] 
array[1] [3] 
array[2] [3]
array[3] [3] 
array[3] [2] 
array[3] [1]
array[3] [0] 

などなどですが、それを埋めるために使用する適切なサイクルがわかりませんので、皆さんに助けを求めなければなりません

4

2 に答える 2

0

こんにちは、次のコードがうまくいくことを願っています。printf正しい値が格納されているかどうかを示すステートメントを保持しました。

#include<stdio.h>
#define MAT_DIM 4

int main()
{
    int loop1,loop2;
    int number = 0;
    int array[MAT_DIM][MAT_DIM];    
    for(loop1 = 0; loop1 < MAT_DIM; loop1++)
    {
        for(loop2 = 0; loop2 <= loop1; loop2++) 
        {
            array[loop2][loop1] = ++number;                 
            printf("%d  %d  %d \n", loop2, loop1, array[loop2][loop1]); 
        }


        for(loop2 = loop1-1; loop2 >= 0; loop2--) 
        {
            array[loop1][loop2] = ++number;
            printf("%d  %d  %d \n", loop1, loop2, array[loop1][loop2]);
        }
    }           
    return 0;
}

編集

コードは次のように機能します。loops

  1. 行列の次元を増やす (外側のインクリメンタル ループ)
  2. 次元が固定されると、2 番目のループが次の列に進むのに役立ちます。(内側のインクリメンタル ループ)
  3. 最初の行に戻るには、3 番目のループが必要です。(内側の減分ループ)

For First Interation: 1*1 次元の配列を格納しています。ここで、内側の減分ループは機能しません

For Second Interation: loop11になるため、2 番目の行に到達するまで 2 番目の列に次の値が入力されます。ここで 2 番目の内部ループが表示されます。このループは、現在の行から値を格納し、loop2値をデクリメントし始めます。ゼロになるとすぐ壊れます。

したがって、列を最初にインクリメントする loop で格納し、次に行をデクリメントする loop で格納しています。外側のループがループ内の次元に達するまで、同じことが続きます。ここでは、行列の次元として最大4になります。

于 2015-06-06T21:36:31.707 に答える
-2

逆 L を実行しているだけです。したがって、列を作成してから行を作成する必要があります。コードを見る

`

int k=1;
//n= no of rows/cols
array[0][0]=1;
for(i=0;i<n;i++)
{
    for(j=0;j<=i;j++) //column
    array[j][i]=k++;

    for(j=i-1;j>=0;j--)  //row
    array[i][j]=k++;
}

`

于 2015-06-06T20:32:15.993 に答える