習題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,我一方面想撿起來,另一方面也想考上它。就從現在起加油吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM