首页 > 试题广场 >

KiKi判断上三角矩阵

[编程题]KiKi判断上三角矩阵
  • 热度指数:18433 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。


输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。



输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

示例1

输入

3
1 2 3
0 4 5
0 0 6

输出

YES
示例2

输入

4
1 2 3 4
5 6 7 8
9 0 11 12 
13 0 0 16

输出

NO
import java.util.Scanner;
/**
 * Created by kingwan on 2020/10/9.
 * 说明:取巧
 */
public class Main {
    static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        boolean flag = true;//是否为上三角矩阵的标志
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int value = scanner.nextInt();
                //只要j<i就是在左下角的数
                if(j<i){
                    //大于0-->false
                    if(value>0){
                        flag = false;
                    }
                }
            }
        }
        System.out.println(flag?"YES":"NO");
    }
}

发表于 2020-10-09 19:37:16 回复(1)
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<vector<int>> vec;
	int num;
	cin >> num;

	for (int i = 0 ; i < num; ++i)
	{
		vector<int> temp;
		int temp_num;
		for (int j = 0 ; j < num; ++j)
		{
			cin >> temp_num;
			temp.push_back(temp_num);
		}
		vec.push_back(temp);
	}

	int flag = 1;
	for (int i = 0; i < num; ++i)
	{
		if (flag == 0) break;
		for (int j = 0; j < i; ++j)
		{
			if (vec[i][j] != 0)
			{
				flag = 0;
				break;
			}
		}
	}

	cout << ((flag == 1) ? "YES" : "NO");
}

发表于 2020-07-27 21:37:15 回复(1)
#include <stdio.h>

int main(){
    int n, arr[10][10];
    int count, x = 0, flag = 1;
    scanf("%d", &n);
    for(int i = 0; i < n; i++, x++){
        count = 0;
        for(int j = 0; j < n; j++){
            scanf("%d", &arr[i][j]);
            if(arr[i][j] == 0)
                count++;
        }
        if(count != x)
            flag = 0;
    }
    printf("%s", flag? "YES" : "NO");
    return 0;
}

发表于 2022-06-08 22:05:55 回复(0)
在参考第一名的回答之后作出了一些简单的优化:
题目的n已经给定范围了,2<n
所以可以省去n=1时候的情形;
n = int(input())
array = []
for i in range(n):
    array.append([int(x) for x in input().split()])
flag =1
for x in range(1,n):#行
    for y in range(x) :#列
        if (array[x][y] != 0):
            flag =0
if flag ==1:
    print("YES")
else:
    print("NO")

发表于 2020-10-12 11:17:03 回复(0)

                                JavaScript

while(line = readline()){
    var n = parseInt(line);
    var res =""
    for(var i=0;i<n;i++){
        var line = readline();
        if(line.includes("0 ".repeat(i))){
            res+="YES"
        }else{
            res+="NO"
        }
    }
    if(res.includes("NO")){
        console.log("NO");
    }else{
         console.log("YES");
    }
}


发表于 2020-06-22 10:05:23 回复(0)
输入的时候就判断
#include <stdio.h>
int main()
{
    int n,a[12][12];
    int i,j;
    scanf("%d",&n);
    int flag=0;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
            if(i>j&&a[i][j]!=0){
                flag=1;
            }
        }
    }
    if(flag) printf("NO\n");
    else printf("YES\n");
}

发表于 2020-04-10 15:16:41 回复(0)
n = int(input())
ln = []
for i in range(n):
    ln.append(list(map(int, input().split())))

flag = True
for i in range(1, n):
    for j in range(i):
        if ln[i][j] !=0:
           flag = False
           break
if flag:
    print("YES")
else:
    print("NO")

发表于 2021-09-18 11:03:38 回复(0)
#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;
}

发表于 2022-08-04 22:22:26 回复(0)
#include <stdio.h>

int main() {
    int n,m,sum=0;
    int arr[101][101]; 
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&arr[i][j]);
            if(i>j){
                sum+=arr[i][j];
            }
        }
    }
    if(sum==0){
        printf("YES");
    }
    else{
        printf("NO");
    }
    return 0;
}

编辑于 2024-02-03 22:21:41 回复(0)
n = int(input())
nums = []
for i in range(n):
    s = input()
    num = list(map(int, s.split()))
    nums.append(num)

for i in range(1,n):
    for j in range(i):
        if nums[i][j] == 0:
            continue
        else:
            print("NO")
            break
    else:
        continue
    break
else:
    print("YES")    
发表于 2023-04-13 16:13:08 回复(0)
#include <stdio.h>
int main()
{
    int arr[16][16] = {0};
    int n = 0;
    scanf("%d",&n);
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=n;j++)
        {
            scanf("%d",&arr[i][j]);
            if(j<=i-1)
            {
                if(arr[i][j])//若不为零则不是上三角矩阵
                {
                    printf("NO\n");
                    return 0;
                }
            }
        }
    }
    printf("YES\n");
    return 0;
}

发表于 2023-03-18 09:42:44 回复(0)
#include<stdio.h>
int main(){
    int n,flag=1;
    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>0){//当i-j>0时,a[i][j]为下三角的元素
                if(a[i][j]!=0)
                    flag=0;
            }
        }
    }
    if(flag)
        printf("YES");
    else printf("NO");
    return 0;
}

发表于 2022-02-10 09:29:48 回复(1)
n = int(input())
l1 = [[i for i in input().split(" ")]  for j in range(n)]

flag = 0   # 0代表主对角线下都是0
for x in range(n): # x
    for y in range(n):   # y
        if x - y > 0 and l1[x][y] != "0":
            flag = 1
            break
    if flag == 1:
        break
if flag == 1:
    print("NO")
else:
    print("YES")
发表于 2025-11-26 23:18:06 回复(0)
n=int(input())
ll=[[0]*n for _ in range(n)]
sum=0
for i in range(n):
    row=list(map(int,input().split()))
    for j in range(n):
        ll[i][j]=row[j]

        if i>j:
            sum+=ll[i][j]
            
if sum==0:
    print("YES")
else:
    print("NO")

发表于 2025-11-25 23:54:41 回复(0)
#include <stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int arr[n][n];
int i=0;
int j=0;
int flag=1;//是上三角
for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        scanf("%d",&arr[i][j]);
    }
}
//判断
for(i=0;i<n;i++)
{
    for(j=0;j<i;j++)
    {
        if(arr[i][j]!=0)
        {
            flag=0;
            goto end;
        }
    }
}
end:
if(flag==0)
printf("NO\n");
else
printf("YES\n");
    return 0;
}
发表于 2025-11-15 18:07:42 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    bool flag=false;
    int a[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;++j){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<n;++i){
        for(int j=0;j<i;++j){
            if(a[i][j]!=0){
                flag=true;
            }
            if(flag) break;
        }
         if(flag) break;
    }
     if(flag) cout<<"NO"<<endl;
     else cout<<"YES"<<endl;
}

发表于 2025-11-01 20:12:20 回复(0)
#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin>>a;
    int arr[a][a];
    int num=0;
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<a;j++)
        {
            cin>>arr[i][j];
        }
    }
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<a;j++)
        {
            if(arr[i][j]==0&&i>j)
            {
                num++;
            }
        }
    }
    int num2=0;
    for(int i=1;i<a;i++)
    {
        num2+=i;
    }
    if(num==num2)
    {
        cout<<"YES";
    }
    else
    {
        cout<<"NO";
    }

}
发表于 2025-09-13 10:32:12 回复(0)
#include <stdio.h>

int main() {
    int a, b[100][100]={};
    scanf("%d",&a);
    int x,y;
    for(x=1;x<=a;x++){
        for(y=1;y<=a;y++){
            scanf("%d",&b[x][y]);
        }
        //printf("\n");
    }
    int i,j,c=0;
    for(i=2;i<=a;i++){
        for(j=1;j<=i-1;j++){
            if(b[i][j]!=0){
                c++;
            }
        }
    }
    if(c==0){
        printf("YES");
    }
    else{
        printf("NO");
    }
    return 0;
}
发表于 2025-08-11 18:49:44 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    int n = 0;
    int arr[10][10] = { 0 };
    while (scanf("%d", &n) != EOF)
    {
        int i = 0;
        int j = 0;
        for(i=0;i<n;i++)
        {
            for (j = 0; j < n; j++)
            {
                scanf("%d", &arr[i][j]);
            }
        }
        i = n-1;
        j = 0;
        while (i > 0)
        {
            if (arr[i][j] == 0 && j < i)
            {
                j++;
                if (j == i)
                {
                    --i;
                    j = 0;
                }
            }
            else
            {
                printf("NO");
                break;
            }
        }
        if (i == 0 && j == 0)
        {
            printf("YES");
        }
    }
    return 0;
}
发表于 2025-08-04 15:59:19 回复(0)
#include <stdio.h>

int main() {
    int a, flag = 1;
    scanf("%d", &a);
    int arr[a][a];
    for(int i = 0; i < a; i++)
    {
        for(int j = 0; j < a; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for(int i = 1; i < a; i++)
    {
        for (int j = 0; j < i; j++)
        {
            if(!flag)
            break;
            if(arr[i][j])
            {
                flag = 0;
                printf("NO\n");
                break;
            }
           
        }
    }
    if(flag)
    printf("YES\n");
    return 0;
}
发表于 2025-04-29 12:40:13 回复(0)