首页 > 试题广场 >

上三角矩阵判定

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

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


输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤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
#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;
}

发表于 2021-07-14 19:43:08 回复(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;
}

发表于 2020-10-02 21:34:11 回复(0)
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");
        }
    }
}

发表于 2020-06-02 14:58:33 回复(0)
#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;
}

编辑于 2020-04-19 22:51:27 回复(0)
#include <stdio.h>
int main()
{
    int a[15][15],b[15][15];
    int i,j,n,m,flag=1;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
            if(i>j&&a[i][j]){
                flag=0;
            }
        }
    }
    if(flag) printf("YES\n");
    else printf("NO\n");
}

发表于 2020-04-10 18:46:22 回复(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;
}

发表于 2021-04-10 14:58:21 回复(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;
}

发表于 2022-07-16 11:18:52 回复(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;
}

发表于 2024-01-24 22:38:11 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int count = 0;
    scanf("%d", &n);
    int arr[100] = { 0 };
    for (int i = 1; i <= n * n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int b = n + 1;
    for (int i = 1; i < n; i++)
    {
        int a = i;
        int c = b;
        while (a)
        {
            if (arr[c]==0)
            {
                count++;
                c++;
            }
            a--;
        }
        b += n;
    }
    if (count == (n * (n - 1)) / 2)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0;
}
编辑于 2024-01-23 20:43:52 回复(1)
#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;
}

发表于 2024-06-16 19:45:16 回复(0)
#include <stdio.h>
int main() {
    int n,i,j,flag=1;
    scanf("%d",&n);
    int arr[n][n];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&arr[i][j]);
    for(i=1;i<n;i++)
        for(j=0;j<i;j++)
        {
            if(arr[i][j]!=0)
            {
                flag=0;
                goto again;
            }
        }
again:
    if(flag)
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}
发表于 2024-05-17 23:46:39 回复(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;
}

编辑于 2024-02-14 16:14:58 回复(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;
}

发表于 2024-02-04 01:05:33 回复(0)
#include<stdio.h>
int main()
{
    int i = 0, j = 0;
    int number = 0;
    int arr[20][20] = { 0 };
    scanf("%d", &number);
    for ( i = 0; i < number; i++) {
        for ( j = 0; j < number; j++) {
            scanf("%d", &arr[i][j]);
        }
    }for (i = 0; i < number; i++) {
        for(j=0;j<number;j++){
            while (i > j) {
                if (arr[i][j] == 0) {
                    break;
                }
                else {
                    printf("NO\n");
                    goto loop;
                }
            }
        }
    }
    printf("YES\n");
    loop:
    return 0;
}
发表于 2023-10-30 07:57:09 回复(0)
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int j = 0;  
    int arr[10][10] = {0};
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n;j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    int s = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i > j)
            {
                if (arr[i][j] != 0)
                {
                    printf("NO\n");
                    s = 1;
                    break;  
                }
            }
        }
        if (s == 1)
        {
            break;
        }
    }
    if (s == 0)
    {
        printf("YES\n");
    }

    return 0;
}

发表于 2023-07-31 20:56:09 回复(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;
}

发表于 2023-07-22 17:00:04 回复(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;
}

发表于 2023-06-05 15:56:42 回复(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;
}

发表于 2023-03-22 13:03:36 回复(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;
}

发表于 2023-03-15 14:48:52 回复(1)
C语言
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;
}


发表于 2023-03-13 20:57:32 回复(0)