首页 > 试题广场 >

KiKi判断上三角矩阵

[编程题]KiKi判断上三角矩阵
  • 热度指数:16401 时间限制: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;
   scanf("%d",&n);
   int i,j,array[n][n],flag=0;
   for(i=0;i<n;i++)
   {
    for(j=0;j<n;j++)
    {
        scanf("%d",&array[i][j]);
    }
   }
   for(i=0;i<n;i++)
   {
    for(j=0;j<n;j++)
    {
        if(j<i&&array[i][j]!=0)
        {
            flag=1;
        }
    }
   }
   if(flag==1)
   {
    printf("NO\n");
   }
   else{
    printf("YES\n");
   }
    return 0;
}

发表于 2024-10-02 20:36:02 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] arr = new int[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = in.nextInt();
            }
        }

        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if(arr[i][j]==0){
                    count++;
                }
            }
        }

        int num=isT(n);
        if(num == count){
            System.out.print("YES");
        }else{
            System.out.print("NO");
        }
        
    }

    private static int isT(int n) {
        if(n==1){
            return 0;
        }else if(n==2){
            return 1;
        }else{
            return isT(n-1) + (n-1);
        }

    }
}

发表于 2024-10-01 14:46:24 回复(0)
n = int(input())
arr = [input().split() for _ in range(n)]
flage = False  
for i in range(1,n):
    for j in range(i):
        if arr[i][j] != "0":
            flage = True
            break
    if flage:
        break
resu = "NO" if flage else "YES"
print(resu )

发表于 2024-09-29 19:18:58 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] nums = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                nums[i][j] = in.nextInt();
            }
        }

        int flag = 0; //判断对角线下面是否为0
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i][j] != 0) {
                    flag = 1;
                }
            }
        }
        if (flag == 0) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}

发表于 2024-09-10 16:51:16 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        boolean b = sz(n,in);
        if(b){
            System.out.println("YES");
        }else{
              System.out.println("NO");
        }
    }
    public static boolean sz(int n ,Scanner in){
        int count = 0;
        int[][] arr = new int[n][n];
        for(int i = 0; i < n; i++){
             int sum = 0;
            for(int j = 0; j < n; j++){
                arr[i][j] = in.nextInt();
                if(arr[i][j] == 0){
                   //每行零的个数
                    sum++;
                }
            }
           if(i>0){
            //从第二行开始每行增加一个零
            count++;
            if(count != sum){
                return false;
            }
           }
        }
        return true;
    }
}
发表于 2024-09-01 16:36:55 回复(0)
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[50][50] = { 0 };
	int i = 0;
	int j = 0;
	int flag = 0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	//判断上三角矩阵,如果数不为0,则flag==0,为0则为1
	for (i = 1; i < n; i++)
	{
		for (j = 0; j < i; j++)
		{
			if (arr[i][j] != 0)
			{
				flag = 1;
			}
		}
	}
	if (flag == 0)
	{
		printf("YES");
	}
	else
	{
		printf("NO");
	}
}

发表于 2024-08-29 17:16:37 回复(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");
    }
}

发表于 2024-08-15 21:47:47 回复(0)
#include <stdio.h>

int main() {
    int a=0;
    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]);
    }
    int b=0;
    for(int i=1;i<a;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(arr[i][j]!=0)
            {
                b=1;
                break;
            }
        }
    }
    if(b==0)
    printf("YES\n");
    else
     printf("NO\n");
    return 0;
}
发表于 2024-08-02 20:48:53 回复(0)
#include <stdio.h>

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

    }
    
    return 0;
}

发表于 2024-06-22 16:22:27 回复(0)