2016-12-06 4 views
0

私は8 * 8の行列を持っています。次の値メイン対角線のエントリを置換する

を持つことは、それが対角が2つのパートトップとボトムに分割されているような

を次のように入れ替えたいです。最初のエントリ1は、底部の最初の位置に塗りつぶされます。 2番目の入力2は、最上部の最初の位置に配置されます。

この考え方を、行列の他の対角に拡張したいと思います。

for(int row = 0; row < dimension; row++){ for(int col = 0; col < dimension; col++){ if(row == col){ // Do something to this cell. } } }

答えて

0

私が最もストレートな解決策は、第1の追加配列に対角値を保存し、その位置へのサイクルでその要素をコピーすることであると思います。 Cで

解決策:SIZEはあなたが説明したようにそれを動作させるためには、偶数でなければならないこと

int top = 0; // Index where the top part currently is 
int bottom = SIZE/2; // Index where the bottom part currently is 
int diagonal[SIZE]; // Additional array, which stores the diagonal elements 

for(int i = 0; i < SIZE; i++) 
    diagonal[i] = matrix[i][i]; // Fill the additional array with diagonal elements 

for(int i = 0; i < SIZE; i++) 
{ 
    if(i%2 == 0) // put it to lower part 
    { 
     matrix[bottom][bottom] = diagonal[i]; 
     bottom++; // Update the bottom index 
    } 

    else // put it to upper part 
    { 
     matrix[top][top] = diagonal[i]; 
     top++; // Update the top index 
    } 
} 

注意、。

+0

私たちはそれが7などの対角線の奇妙なサイズで動作するようにすることはできません – Infinity

+0

もちろんできます。しかし、どのようにしてマトリックスを見たいのですか?SIZE = 7? –

+0

私はこの行列のすべての対角線について同じことをしたいと思います。対角線は間違った用語を使用するかもしれませんが、私はこの行列の他の対角パスを言うことを意味します。私はあなたが私の質問を理解してくれることを願っています – Infinity

関連する問題