因为学校12月份要举办蓝桥杯的选拔赛,所以参加英雄哥的《七月集训》,想通过训练能让自己掌握算法的一些知识的同时,也为以后的工作做准备,学到知识最重要,得不得奖反倒是其次了。话不多说,直接进入正题。
第一天的集训的主题主是学习过程中接触最早,也是比较容易理解的数组。
题目描述:
如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :
矩阵对角线上的所有元素都 不是 0
矩阵中所有其他元素都是 0
给你一个大小为 n x n 的二维整数数组 grid ,表示一个正方形矩阵。如果 grid 是一个 X 矩阵 ,返回 true ;否则,返回 false 。
题目思路:首先我们得清楚矩阵不单单是有主对角线,还有一条副对角线,自己在做题的时候忘了加上副对角线的判断,从而导致解题出错。如果我们令i 与 j分别代表矩阵的横纵坐标,那么则有:
主对角线:i = j;
而副对角线 i + j=矩阵的最大阶数
代码方面:直接双重循环,满足主对角线或者副对角线的点值不能等于0,若不满足,则值不可以为非零。
解题代码:
bool checkXMatrix(int** grid, int gridSize, int* gridColSize){
int i, j;
int res = 0; //默认标识符为0,若有不符合条件的则变为1
for(i=0; i<gridSize; i++) //检测主对角线与副对角线
{
for(j=0; j<gridSize; j++)
{
if(i == j || i+j == gridSize-1) //主对角线和副对角线的判断条件
{
if(grid[i][j] == 0)
res = 1;
}
else
{
if(grid[i][j] != 0)
res = 1;
}
}
}
//标识符为0代表是X矩阵,返回True,否则返回false
if(res == 0)
return true;
else
return false;
}