上三角矩陣指主對角線以下的元素都為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,我一方面想撿起來,另一方面也想考上它,就從現在起加油吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/173520.html
標籤:其他
