KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
3 1 2 3 0 4 5 0 0 6
YES
4 1 2 3 4 5 6 7 8 9 0 11 12 13 0 0 16
NO
#include<stdio.h> void arr_scanf(int arr[10][10], int n) { int i = 0; int j = 0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d ",&arr[i][j]); } } } void arr_judge(int arr[10][10],int n) { int i = 0; int j = 0; int count = 0; for(i=0;i<n;i++) { for(j=0;j<i;j++) { if(arr[i][j]==0) { count++; } } } if(count==(n*n-n)/2) { printf("YES\n"); } else { printf("NO\n"); } } int main() { int n = 0; scanf("%d",&n); int arr[10][10]={0}; arr_scanf(arr,n); arr_judge(arr,n); return 0; }
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[10][10] = { 0 }; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } int sum = 0; int a = n * (n - 1) / 2; int k = 0; int p = 1; while(a) { while(p < n) { sum += arr[p][k]; a--; p++; } k++; p = 1 + k; } if(sum == 0) { printf("YES"); } else { printf("NO"); } }
#include <stdio.h> #include <malloc.h> int main() { int n = 0; int i = 0; int j = 0; int* p = NULL; scanf("%d", &n); //开辟空间 p = (int*)malloc(sizeof(int) * n * n); if(!p) { perror("malloc:p"); return 1; } //录入数据 for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { scanf("%d", p + (i * n) + j); //进行判断 if(i > j) { if(*(p + (i * n) + j) != 0) { //不是上三角阵,提前结束循环 //已经刮出“谢”字,再继续刮也出不来“再来一瓶” printf("NO\n"); free(p); p = NULL; return 0; } } } } printf("YES\n"); free(p); p = NULL; return 0; }
#include <stdio.h> int main() { int n = 0; int arr[100][100]; scanf("%d",&n); //输入 for(int i = 0;i<n;i++) { for(int j = 0;j<n;j++) { scanf("%d",&arr[i][j]); } } //判断从对角线以下的值如果有一个不是0则跳出 int flag = 0; for(int i=1;i<n;i++) { for(int j = 0;j<i;j++) { if(arr[i][j]!=0) { flag = 1; } } } if(flag==0) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
#include <stdio.h> int main() { int n; scanf("%d ",&n); int arr[n][n]; int i,flag = 1; for(i=0;i<n;i++) { int j; for(j=0;j<n;j++) { scanf("%d ",arr[i]+j); if(i>j) { if(arr[i][j] != 0) { flag = 0; } } } } if(flag) { printf("YES"); } else { printf("NO"); } return 0; }
#include <stdio.h> int main() { int a = 0,i = 0, j = 0, arr[100][100] = { 0 }; scanf("%d", &a); for (i = 0; i < a; i++) { for (j = 0; j < a; j++) { scanf("%d", &arr[i][j]); } } for (i = 1; i < a; i++) { for (j = 0; j < i;j++) { if (arr[i][j] != 0) break; } if (j != i) break; } if (i == a) printf("YES\n"); else printf("NO\n"); return 0; }
#include <stdio.h> #include <stdlib.h> void init_Array(int n, int **p); int main(){ int n, isUpTriangle = 1; scanf("%d",&n); //动态创建二维数组 int **p = (int **)malloc(n * sizeof(int *)); for(int i = 0; i < n; i++){ p[i] = (int *)malloc((n * sizeof(int))); } //初始化建立二维数组 init_Array(n, p); //按行优先遍历主对角线以下的元素 for(int i = 0; i < n; i++){ for(int j = 0; j < i; j++){ //若有非零值,跳出循环 if(p[i][j] != 0){ isUpTriangle = 0; break; } } if(!isUpTriangle){ break; } } if(isUpTriangle){ printf("YES\n"); } else { printf("NO\n"); } return 0; } void init_Array(int n, int **p){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ scanf("%d",&p[i][j]); } } }抄袭上一题讨论中的答案,学习建立动态数组
#include<stdio.h> int main() { int n = 0, i = 0, j = 0, arr[10][10]; scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &arr[i][j]); if (j < i && arr[i][j] != 0) { printf("NO\n"); return 0; } } } printf("YES\n"); return 0; }