1

次のように配列にデータを入力するにはどうすればよいですか。

1 2 3 4
2 3 4 3
3 4 3 2
4 3 2 1

この配列に入力するパターンを決定する式を見つける必要があります。

#include <stdio.h>
#define N 4

int main()
{
int i,j,arr[N][N];
int a=1;
for(i=0;i<N;i++)
    for(j=0;j<N;j++)
    {
        arr[j][i]=i+j+1;
    }
for(i=0; i < N; i++)

    for(j=0;j<N;j++)
        printf("%2i ",arr[j][i]);
        printf("\n"); 


 return 0;
}

2行目の最後に「3」が必要であることを除いて、目的の配列と同様に出力され、その後は逆になります。その方法を教えてください。

4

2 に答える 2

1

これを試して:

    arr[j][i]=N-abs(i+j-(N-1));

abs()ある値の周りにミラーリングされた数値シーケンスが必要な場合はいつでも使用できます。ミラーリングする値がゼロになるように定数を減算し、絶対値を取得してから、出力を再調整するだけです。

あなたの場合(N = 4の場合)、(i+j)合計は0、1、2、3、4、5、6になります。最大値は 2 * (N-1) であるため、中間値は N-1 です。

N-1 (3) を引くと、-3、-2、-1、0、1、2、3 が得られます。

abs()得られるもの: 3,2,1,0,1,2,3 。

これを N (4) から差し引くと、目的の 1,2,3,4,3,2,1 シーケンスが得られます。

于 2013-01-08T14:35:01.903 に答える
0
arr[j][i]=(j * 3 + j/ 3 + b) % N + 1;
于 2013-01-08T14:49:48.820 に答える