上三角矩陣指主對角線以下的元素都為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,我一方面想撿起來,另一方面也想考上它。就從現在起加油吧!