这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战
java一百题——3
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
输入样例:
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6
输出样例:
YES
NO
NO
解题思路
我们首先用二维数组存取数据,a[][];
然后利用双层的循环,第一层循环用来循环层数,第二层循环用来循环每一行的个数,即判断是否为下三角。我们能够从下三角的排列规律中知道每一层前n个数不为0,随后每层n的值减一。一旦为0就立即跳出循环。然后将结果整理后输出。 根据flag的值,把“YES”加入结果字符串res,否则将“NO”加入结果字符串res。
这一题做的过程中需要不断的调式验证结果,使用for循环时要注意结束的条件与标志以及获得的结果,对结果处理时要注意结果的要求形式。不能输出错误的格式。
代码
package PTA;
import java.util.Scanner;
public class T03 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String res="";
for(int i=0;i<n;i++) {
int m=sc.nextInt();
int[] a[]=new int[m][m];
//存入二维数组
for(int j=0;j<m;j++) {
for(int k=0;k<m;k++) {
a[j][k]=sc.nextInt();
}
}
//判断是否为上三角矩阵
boolean flag=true;
int count=0;
for(int k=0;k<m;k++) {
for(int l=0;l<count;l++) {
if(a[k][l]!=0) {
flag=false;
break;
}
}
if(flag!=true)
break;
else
count++;
}
if(flag)
res+="yes";
else
res+="NO";
res+=",";
}
String[] ss=res.split(",");
for(int i=0;i<ss.length;i++) {
System.out.println(ss[i]);
}
// System.out.println(res);
}
}