习题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,我一方面想捡起来,另一方面也想考上它。就从现在起加油吧!

posted @ 2020-10-16 00:30  沉梦昂志_doc  阅读(1042)  评论(0编辑  收藏  举报