对角C++
若一个n阶方阵A满足其所有非零元素都集中在以主对角为中心的带状区域中,则称其为n阶对角矩阵。
像左边这样的6*6的矩阵,每行都有3个非零元素。
但第一行左半部分是没有数字的,并且最后对角线的又半部分也没有数字,那么一共的数字就是3*i-2,我们设定i为矩阵的行数。
经过观察推理发现对角线的元素符合公式3*i-2,而3*i-2-1和3*i-2+1就是对角线元素左右两边的元素。j为矩阵的列数,让j>=i-1且j<=i+1时打印j,而原来的3*i-2我们可以看成i+i+i+2,把其中的一个i用j代替,用j取3个数,i+1和i-1和i,这样我们就可以导出原有的公式2*i+j-2,因为我们b是从b[0]开始的,所以第一个数是b[0],所以要在2*i+j-2的基础上-1,我们就导出了公式2*i+j-3。
现在我们把每行最多的个数设定为x,每次改变x最后的效果。
推导得出结论:第一行(列)最后一行(列)都只有两个元素,且按照行存储时,a[i][j]=2i+j;
第一行(列)最后一行(列)都有多于两个元素,设对角线元素左或右有t个非零元素,行排序时,a[i][j]=1+t+(i-1)*(t+2)+ (j-(i-t))。

浙公网安备 33010602011771号