沿对角线编程0

时间:2014-11-20 22:36:26

标签: c++ arrays matrix

我有一个矩阵扁平成一维阵列。我怎样才能将0放在所有对角线上?例如,对于4x4矩阵,我尝试了这个(n=4

int j = 1;

for (int i = 0; i < n*n; i++)
    {
        if (i % 4 == 0)
        {
            global_matrix[i + j] = 0;
            j++;
        }
    }

但我得到了这个

|       0       |       61      |       64      |       80      |
|       0       |       16      |       35      |       15      |
|       0       |       74      |       7       |       68      |
|       0       |       54      |       92      |       63      |

2 个答案:

答案 0 :(得分:5)

没有必要为此循环所有元素,并使用条件来决定哪些元素在对角线上。对n对角元素进行简单的循环就可以了。

关键的观察是,每次移动到下一行时,对角元素都会移动一个位置。因此,如果查看所有对角线元素的索引,它们间隔为n + 1

for (int i = 0; i < n; ++i) {
    global_matrix[i * (n + 1)] = 0;
}

另一种推导方法:当访问存储在一维数组中的矩阵中的元素(i, k)时,索引计算为i * n + k。对于对角元素,ik相等,因此该表达式变为i * n + i。应用基本代数,这等于i * (n + 1)

答案 1 :(得分:1)

初始化j = 0,并在我的机器上工作

int main()
{
    int j = 0, n=4, global_matrix[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

    for (int i = 0; i < n*n; i++)
    {
        if (i % 4 == 0)
        {
            global_matrix[i + j] = 0;
            j++;
        }
    }
    for(int i = 0; i < n*n; i++)
        cout<<global_matrix[i];
    return 0;
}