习题7-3 判断上三角矩阵
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
以上是题目要求。接下来先给出代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #include<string.h> //有些.h是没有用到的,不过出于习惯,并且没有工程压力就加上了。 5 int main() { 6 int n = 0; // n是整个矩阵的个数 7 int* m; // m是第n个矩阵(方阵)的横或纵的数 【m是数组】 8 int a = 0; // a是判断条件,后面在if语句里会用到 9 //int interval = 0; //无关要素,请自动忽略 10 int boo[10]; //把每一个矩阵的判断放到此数组中 11 scanf("%d", &n); 12 m = (int*)malloc(n * sizeof(int)); //动态数组 13 14 for (int l = 0; l < n; l++) { 15 boo[l] = 1; //此处直接先假设都是 上三角矩阵 后面如果遇到不符的直接判0 16 scanf("%d", &m[l]); 17 int len = pow(m[l],2); 18 for (int i = 0; i < m[l]; i++) { 19 for(int j = 0 ; j < m[l] ; j++){ 20 scanf("%d", &a); 21 if (i > j) { 22 if (a != 0) { 23 boo[l] = 0; //这里 !我的思路是在线处理 24 } 25 } 26 27 } 28 } 29 } 30 for (int i = 0; i < n; i++) { 31 if (boo[i] == 1) { 32 printf("YES\n"); 33 } 34 else 35 printf("NO\n"); 36 } 37 return 0; 38 39 }
以上是代码,接下来逐步分析。
我大一就学过了c,这次是重新学c,想通过c把自己的代码找回来,毕竟上一年都在学理论课,比如操作系统, 数据结构,网络和组成原理这种,就把代码耽搁了,这次争取补回来并且从不同的方向加油。
这个题我的核心思路是,在线处理,就是输入一个数字,如果符合条件,就进行判断,并且将判断的结果保存在boo数组中。
然后需要稍微动脑的地方就是,如何表示对角线以下都是“0”,我用的是笨的方法,就是用了2个for嵌套,外层是横坐标,内层是纵坐标,然后横坐标>纵坐标,即对角线以下的元素。
写写心得体会吧
1.此代码可以精进,如果按照我这个思路来的话,可以不用2层for来解决元素位置问题,可以运用数学方法巧妙解决,奈何宝宝笨,想了很久也想不出巧法,要不就定义很多数据,我不喜欢这样子,就采用了本方法,如果兄弟们有好的方法,可以在评论区说下或者私信都可以。我一定第一时间解决。
2.大三了,准备考研了,为啥学c呢,因为它考c,我一方面想捡起来,另一方面也想考上它。就从现在起加油吧!