java一百题——3

136 阅读2分钟

这是我参与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);
	}

}