下面我会围绕奇数型矩阵和偶数型矩阵来展开。
什么是奇数型矩阵?
eg.a[3][3]、a[5][5]、a[7][7]、a[9][9]…
什么是偶数型矩阵?
eg.a[4][4]、a[6][6]、a[8][8]、a[10][10]…
奇数型矩阵实战
Question1:现有三行三列的二维数组int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};,编写程序实现计算对角线元素之和。
我给大家写在纸上,大家来一起观察。
你会发现,奇数型矩阵(a[3][3])的对角线上的数全是奇数,(你还可以拿张纸自行试一下a[5][5]、a[7][7]、a[9][9]…)那么我们可以利用奇数取2余1的或不等于1的特点来编写程序。
#include <stdio.h>
int main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++){
if(a[i][j]%2!=0)//a[i][j]代表对角线上的各个元素
sum+=a[i][j];//符合条件的累加
}
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
笔算结果应该是:1+5+9+3+5+7=30?
可我们输出以后是什么?
哪里有问题?
你会发现矩阵的C位加了两遍,谁在C位?一看小丑竟是5(wo)自己。
所以说按照多维数组的方法来遍历矩阵,计算对角线元素的时候他是不会重复的,因为数组取得是具体的位置,一个萝卜一个坑,不会出岔子。
偶数型矩阵实战
Question2:现有三行三列的二维数组 int wolf[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};,编写程序实现计算对角线元素之和。
这是个偶数矩阵,我们还是来画图分析。
有什么特征?
拿到这道题,我想都没想“拿来主义”,但是一分析好像不行,因为偶数矩阵的对角线有偶数、也有奇数,咋办捏?
同志们,不要忘了数组的特点-----------位置
观察他们的位置
上面是i=j
下面是i+j=4-1而且行是递增的,列是递减的。
代码:
#include <stdio.h>
int main()
{
int wolf[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int i,j;
int sum=0;
int left=0,right=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++){
if(i==j)//
left+=wolf[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=4;j>=0;j--){
if(i+j==3)
right+=wolf[i][j];}
}
sum=(right+left);
printf("对角线元素之和是:%d\n",sum);
return 0;
}
输出结果:
为什么有的梦可以记住,而有的梦不可以?
如果醒过来能记住梦,说明你是在REM阶段醒来的
什么是REM阶段呢?
也就是眼珠子转的比较快的时候你醒啦。