KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
3 1 2 3 0 4 5 0 0 6
YES
#include<stdio.h> int main() { int n,i,j,flag=1; int a[10][10]; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } for(i=1;i<n;i++) { for(j=0;j<i;j++) { if(a[i][j]!=0) { flag=0; } } } if(flag) printf("YES\n"); else printf("NO\n"); return 0; }
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int arr[n][n],arr_num; int flag = 1,count = 0,count_s = 0; for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++){ cin>>arr_num; arr[i][j] = arr_num; if(i>j && arr[i][j] == 0){ flag = 0; //统计0出现的个数 count++; } } } //求正常0出现的个数 for(int m = 0;m<n;m++){ count_s += m; } //判断比较 if(flag == 0 && count == count_s){ cout<<"YES"<<endl; } else cout<<"NO"<<endl; }
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[][] arr=new int[n][n]; int flag=1; for (int i=0;i<n;i++) { for (int j = 0; j < n; j++) { arr[i][j] = sc.nextInt(); } sc.nextLine(); } for (int i=0;i<n;i++){ for (int j=0;j<i;j++){ if(arr[i][j]!=0){ flag=0; } } } if(flag==1){ System.out.println("YES"); }else { System.out.println("NO"); } } }
#include <stdio.h> #include <stdlib.h> int main(void) { int flag; int i, j, n; scanf("%d", &n); int (*a)[n] = (int (*)[n])malloc(sizeof(int) * n * n); if (NULL == a) { fprintf(stderr, "Memory allocation failed!\n"); exit(EXIT_FAILURE); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &a[i][j]); } } flag = 1; for (i = 1; i < n; i++) { for (j = 0; j < i; j++) { if (a[i][j] != 0) { flag = 0; break; } } } printf("%s\n", 1 == flag ? "YES" : "NO"); free(a); a = NULL; return 0; }
#include<stdio.h> //解题思路:录入元素的同时判断是否为上三角矩阵 int main() { int n; scanf("%d",&n); //获取n int arr[n][n]; int i,j; int flag = 1; for(i = 0; i < n; i++) //输入n*n元素 { for(j = 0; j < n; j++) { scanf("%d",&arr[i][j]); if(i > j) //i>j时为下三角的元素 { if(arr[i][j] != 0){ //下三角元素中有不是0的 flag = 0; //标志不为上三角矩阵 //break } } } //if(flag == 0) break; //Note: 上面两个break语句其实可以直接退出循环并达成输出正确的结果 // 但是不满足题目的输入描述:共输入n*n个元素 } printf("%s",(flag?"YES":"NO")); return 0; }
#include <stdio.h> int main() { int n=0; int arr[10][10]={0}; scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&arr[i][j]); } } //判断 for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i>j) { if(arr[i][j]!=0) { printf("NO\n"); return 0; } } } } printf("YES\n"); return 0; }
#include <stdio.h> int main() { int n=0; scanf("%d",&n); int i=0; int arr[n][n]; for (i=0; i<n; i++) { int j=0; for (j=0; j<n;j++) { scanf("%d",&arr[i][j]); } } for (i=1; i<n; i++) { int j=0; for (j=0; j<i;j++) { if (arr[i][j]!=0) { printf("NO\n"); return 0; } } } printf("YES\n"); return 0; }
#include<stdio.h> int main() { int n = 0; int a[10][10] = { 0 }; scanf("%d", &n); int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &a[i][j]); } } int flag = 1; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (i > j) { if (a[i][j] == 0) { flag = 1; } else { flag = 0; break; } } } if (flag == 0) { break; } } if (flag == 1) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
#include <stdio.h> int Is(int arr[][10], int sz) { int r = 0; int c = 0; for (r = 1; r < sz; r++) { //从第2行开始比,一直比到二维数组底部 for (c = 0; c < r; c++) { if (0 != arr[r][c]) { return 0; } } } return 1; } int main() { int arr[10][10] = { 0 }; int sz = 0; int r = 0; int c = 0; int ret = 0; //输入 scanf("%d", &sz); for (r = 0; r < sz; r++) { for (c = 0; c < sz; c++) { scanf("%d", &arr[r][c]); } } //判断 ret = Is(arr, sz); //输出 if (1 == ret) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
#include<stdio.h> int main() { int n = 0; int i = 0; int arr[10][10] = {0}; scanf("%d",&n); for(i = 0;i<n;i++) { int j = 0; for(j = 0;j<n;j++) { scanf("%d ",&arr[i][j]); if(i>j && arr[i][j] != 0)//边输入边判断 { printf("NO\n"); return 0; } } } printf("YES\n"); return 0; }
#include <stdio.h> int main() { int arr[10][10] = {0}; int a = 0; char Flag = 0; int count = 0; scanf("%d",&a); for(int i =0; i<a; i++) { for(int j = 0; j<a; j++) { scanf("%d",&arr[i][j]); } } for(int j =0; j<a; j++) //通过i和j的规律 { for(int i = j+1; i<a; i++) { if(arr[i][j] == 0) { ; } else { printf("NO") ; return 0; } } } printf("YES\n"); return 0; }
#include <stdio.h> int ADD(int n) { if (n == 1) return 1; else return n + ADD(n - 1); } int main() { int n = 0, sum = 0; scanf("%d", &n); int arr[n * n]; for (int i = 0; i < n * n; i++) { scanf("%d", &arr[i]); } for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (arr[i * n + j] == 0) { sum++; } } } if (sum == ADD(n - 1)) printf("YES\n"); else printf("NO\n"); return 0; }
#include <stdio.h> int main(void) { int input = 0; scanf("%d", &input); int arr[10][10] = { 0 }; for (int i = 0; i < input; i ++) { for (int j = 0; j < input; j++) { scanf("%d", &arr[i][j]); } char ch = getchar(); } // 对矩阵对角线以下的元素进行判断 int count = 1; for (int i = 1; i < input; i++) // 行数的循环 { for (int j = 0; j < count; j++) { if (arr[i][j] != 0) { printf("NO\n"); return 0; } } count++; } // 对矩阵对角线以上的元素进行判断 count = input; for (int i = 0; i < input; i++) { for (int j = input - 1; j >= input - count; j--) { if (arr[i][j] == 0) { printf("NO\n"); return 0; } } count--; } printf("YES\n"); return 0; }
int main() { int n; int flag = 0; scanf("%d", &n); int a[n][n]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { scanf("%d", &a[i][j]); if(i > j) { if(a[i][j] != 0) flag = 1; //遇到下方矩阵元素不是1的,表明不是下三角矩阵 } } } if(flag) printf("NO\n"); else printf("YES\n"); return 0; }