如果我有8 * 8矩阵。具有以下值
希望它像下面那样置换
这样对角线分为顶部和底部两部分。第一个条目1
在底部的第一个位置填充。第二个条目2
放置在顶部的第一个位置,依此类推。
我想将这个想法扩展到矩阵的其他对角线。
for(int row = 0; row < dimension; row++){
for(int col = 0; col < dimension; col++){
if(row == col){
// Do something to this cell.
}
}
}
答案 0 :(得分:0)
我认为最直接的解决方案是首先将对角线值保存到其他数组中,然后将其元素循环复制到它们的位置。
C中的可能解决方案:
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
}
}
请注意,SIZE
必须是偶数,才能使其像您描述的那样工作。