问题描述
描述
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
输入描述:
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
输出描述:
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
示例1
输入:
3
1 2 3
0 4 5
0 0 6
输出:
YES
问题分析
//思路:上三角要全满,这是一个数组判断问题。
解决方案
//解决方案:用二维数组来存数字,判断二维数组是否满足上三角函数的要求
//第一:存数字——用两层for()循环来实现二维数组的存取
//第二:判断———同一,双层for()循环,写完后逐个判断
//第三:判断的依据是什么?答:上三角的元素可以找到,然后数有多少个非零元素
代码
#include <stdio.h>
//思路:上三角要全满,这是一个数组判断问题。
//解决方案:用二维数组来存数字,判断二维数组是否满足上三角函数的要求
//第一:存数字———用两层for()循环来实现二维数组的存取
//第二:判断————同一,双层for()循环,写完后逐个判断
//第三:判断的依据是什么?答:上三角的元素可以找到,然后数有多少个非零元素
int main()
{
int n=0;
int arr[50][50]={0};
int num=0;
int flag=0;
scanf("%d",&n);
for(int i=0;i<n;i++) //存数字
for(int j=0;j<n;j++)
scanf("%d",&arr[i][j]);
//计算上三角非零元素的个数
for(int m=0;m<n;m++)
num+=(n-m);
for(int i=0;i<n;i++) //计算上三角矩阵的非零元素个数
for(int j=0;j<n;j++)
if(arr[i][j]!=0)
flag++;
//printf("%d %d ",num,flag);
if(num==flag) printf("YES\n");
else printf("NO\n");
return 0;
}