首页 > 试题广场 >

上三角矩阵判定

[编程题]上三角矩阵判定
  • 热度指数:19722 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛想知道一个 n 阶方阵是否为上三角矩阵。所谓上三角矩阵,是指矩阵中主对角线以下的元素都为 0,其中主对角线是从矩阵左上角到右下角的连线。
\hspace{15pt}请你判断给定的方阵是否满足这一性质。

输入描述:
\hspace{15pt}在一行中输入一个整数 n \left(1 \leqq n \leqq 10\right)
\hspace{15pt}接下来 n 行,每行输入 n 个整数 a_{i,1},a_{i,2},\dots,a_{i,n} \left(-10^{9} \leqq a_{i,j} \leqq 10^9\right),用空格分隔。


输出描述:
\hspace{15pt}如果输入的方阵是上三角矩阵,则输出 \texttt{ (不含双引号)并换行;否则输出 \texttt{ (不含双引号)并换行。
示例1

输入

3
1 2 3
0 4 5
0 0 6

输出

YES

说明

该矩阵主对角线以下元素均为 0,因此是上三角矩阵。
示例2

输入

3
1 0 0
0 2 0
1 0 3

输出

NO

说明

该矩阵在第 3 行第 1 列元素为 1 \neq 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;
}

发表于 2024-06-16 19:45:16 回复(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;
    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 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 Judge(long long arr[10][10],int n)
{
    int count = 0;
    int i = 0;
    for(i = 1;i < n;i++)
    {
        int j = 0;
        for(j = 0;j <= i;j++)
        {
            if(arr[i][j] == 0) 
            {
                count++;
            }                             
        }
    }
    if(count == ((n * (n - 1)) / 2))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main() 
{
    int n = 0;
    scanf("%d", &n);
    long long arr[10][10];
    int i = 0;
    for(i = 0;i < n;i++)
    {
        int j = 0;
        for(j = 0;j < n;j++)
        {
            scanf("%lld", &(arr[i][j]));
        }
    }
    int res = Judge(arr,n);
    if(res == 1)
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
    return 0;
}

发表于 2022-11-22 16:04:58 回复(0)
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[n][n];
    int i = 0;
    for(i = 0;i<n;i++)
    {
        int j = 0;
        for(j = 0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    int flag = 1;
    for(i = 1;i<n;i++)
    {
       int j = 0;
        for(j = 0;j<i;j++)
        {
           if(arr[i][j]!=0)
           {
               flag = 0;
           }
        }
    }
    if(flag == 1)
        printf("YES\n");
    else
        printf("NO\n");
    
    return 0;
}
发表于 2022-07-19 22:33:54 回复(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;
    scanf("%d", &n);
    
    int arr[10][10] = {0};
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    
    int flag = 0;
    for (i = 1; i < n && flag == 0; i++)
    {
        for (j = 0; j < i; j++)
        {
            if (arr[i][j])
            {
                flag = 1;
                break;
            }
        }
    }
    
    if (flag)
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    return 0;
}

发表于 2022-05-25 14:36:05 回复(0)
#include<stdio.h>
int main()
{
    int arr1[10][10] = { 0 };
    int n= 0,flag=0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d\n", &arr1[i][j]);
            if (arr1[i][j] == 0 && j < i)
            {
                flag += 1;
            }
        }
    }
    if (flag == n*(n-1)/2)//数0的个数
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
}
发表于 2022-05-09 09:41:50 回复(0)
int main()
{
    int n,cnt=0,arr[10][10];
    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(arr[i][j]==0)
                cnt++;
        }  
    }
    if(cnt==(n-1)*n/2)//等差数列求和
    printf("YES\n");
    else
        printf("NO\n");
    return 0;
}

发表于 2022-01-03 19:27:39 回复(0)
#include<stdio.h>
int main()
{
	int i, j,m;
	int a[50][50] = { 0 };
    scanf("%d",&m);//输入数组
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            if(i>j)
            {
                 if(a[i][j]!=0)
                  {
                     printf("NO\n");
                     return 0;//如果有不等于0的,直接结束
                  }
            }
        }
     }
    printf("YES\n");//没有不等于0的,直接输出yes
    return 0;
}

发表于 2021-12-29 17:39:41 回复(0)
int main(){
    int n;
    scanf("%d", &n);
    int flag = 1;
    int arr[10][10] = {0};
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            scanf("%d ", &arr[i][j]);
            if(i > j){
                if(arr[i][j] != 0){
                    flag = 0;
                }
            }
        }
    }
    if(flag != 1)
        printf("NO\n");
    else
        printf("YES\n");
    return 0;
}

发表于 2021-12-06 11:47:16 回复(0)
#include<stdio.h>
int main()
{
    int n;
    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]);
        }
    }
    int t=0;
    for(int i=1;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
              if(a[i][j]!=0)
              {
              t++;
              }
            }
        }
        if(t==0)
        printf("YES");
       else
            printf("NO");
    return 0;
}
发表于 2021-11-23 16:32:25 回复(0)
#include<stdio.h>
int main()
{
    int arr[10][10] = { 0 };
    int n = 0;
    int i, j;

    while (~scanf("%d", &n))
    {
        //输入至数组
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                scanf("%d", &arr[i][j]);



        //对角线从k/2行开始
        int flag = 0;
        int k = n / 2;
        for (i = k; i < n; i++)
        {
            for (j = 0; j < i; j++)
                if (arr[i][j] != 0)
                {
                    flag = 1;
                    break;
                }
            if (flag == 1)
            {
                printf("NO\n");
                break;
            }
        }


        if (flag == 0)
            printf("YES\n");

    }
    return 0;
}

发表于 2021-11-16 23:44:14 回复(0)
int main()
{
    int n=0;
    scanf("%d",&n);
    int i=0;
    int j=0;
    int flag=0;
    int arr[10][10]={0};
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
                         //注意此处判断条件
            if(i>j&&arr[i][j]!=0)
            {
                flag=1;
            }
        }
    }
    if(flag==1)
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    return 0;
}

发表于 2021-10-09 10:55:19 回复(0)
#include <stdio.h>

int main(){
    int n,i,j,flag=0;//flag标示是否矩阵是否相同
    int a[11][11]={0};
    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 = 1;
            break;}
        }
    }
    if(flag == 1)
        printf("NO\n");
    else
        printf("YES\n");
    return 0;
}

发表于 2021-09-07 20:31:06 回复(0)
#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)

问题信息

上传者:牛客309119号
难度:
20条回答 2719浏览

热门推荐

通过挑战的用户

查看代码
上三角矩阵判定