首页 > 试题广场 >

KiKi判断上三角矩阵

[编程题]KiKi判断上三角矩阵
  • 热度指数:17590 时间限制: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
#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)
#include<stdio.h>
void arr_scanf(int arr[10][10], int n)
{
    int i = 0;
    int j = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d ",&arr[i][j]);
        }
    }
}
void arr_judge(int arr[10][10],int n)
{
    int i = 0;
    int j = 0;
    int count = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<i;j++)
        {
            if(arr[i][j]==0)
             {
                count++;
             }
        }
    }
    if(count==(n*n-n)/2)
    {
        printf("YES\n");
    }
    else 
    {
      printf("NO\n");
    }
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[10][10]={0};
    arr_scanf(arr,n);
    arr_judge(arr,n);
    return 0;
}

发表于 2025-01-03 10:55:53 回复(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>
#include <malloc.h>

int main() 
{
    int n = 0;
    int i = 0;
    int j = 0;
    int* p = NULL;

    scanf("%d", &n);

    //开辟空间
    p = (int*)malloc(sizeof(int) * n * n);
    if(!p)
    {
        perror("malloc:p");
        return 1;
    }

    //录入数据
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            scanf("%d", p + (i * n) + j);
            
            //进行判断
            if(i > j)
            {
                if(*(p + (i * n) + j) != 0)
                {
                    //不是上三角阵,提前结束循环
                    //已经刮出“谢”字,再继续刮也出不来“再来一瓶”
                    printf("NO\n");
                    
                    free(p);
                    p = NULL;
                    return 0;
                }
            }
        }
    }

    printf("YES\n");

    free(p);
    p = NULL;
    
    return 0;
}

编辑于 2024-03-20 13:59:31 回复(0)
#include <stdio.h>

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

发表于 2024-02-08 18:48:52 回复(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)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int flage = 1;
    int o = 0;
    scanf("%d", &n);
    int arr[100] = { 1 };
    for (int i = 1; i <= n * n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 1; i < n; i++)
    {
        int a = i;
        o = n + 1 + (i - 1) * n;
        while (a)
        {
            if (arr[o]!=0)
            {
                flage = 0;
            }
            o++;
            a--;
        }
    }
    if (flage)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0;
}
编辑于 2023-12-18 10:51:43 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100][100];
    scanf("%d",&n);
    //输入
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    //判断从对角线以下的值如果有一个不是0则跳出
    int flag = 0;
    for(int i=1;i<n;i++)
    {
        for(int j = 0;j<i;j++)
        {
            if(arr[i][j]!=0)
            {
                flag = 1;
            }
        }
    }
    if(flag==0)
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
    return 0;
}

发表于 2023-11-27 22:37:12 回复(0)
#include <stdio.h>
int main()
{
    int n;
    scanf("%d ",&n);
    int arr[n][n];
    int i,flag = 1;
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<n;j++)
        {
            scanf("%d ",arr[i]+j);
            if(i>j)
            {
                if(arr[i][j] != 0)
                {
                    flag = 0;
                }
            }
        }
    }
    if(flag)
    {
        printf("YES");
    }
    else {
    printf("NO");
    }
    return 0;
}

发表于 2023-11-11 10:41:50 回复(0)
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int jg=0;
    int arr[n][n];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
            if(i>j&&arr[i][j]!=0)
            {
                jg=1;
            }
        }
    }
    if(jg==0)
    {
        printf("YES\n");
    }
    else
    printf("NO\n");
    return 0;
}

发表于 2023-08-29 21:08:01 回复(0)
#include <stdio.h>

int main()
{
    int n;
    int i,j;
    scanf("%d",&n);
    int arr[n][n];
    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");
    }
    else
    {
        printf("YES");
    }
    return 0;
}
发表于 2023-06-06 13:26:02 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n, count=0,count1=0;
    scanf("%d",&n);
    int **a=malloc(sizeof(int*)*n);
    for(int i=0;i<n;i++)
        a[i]=malloc(sizeof(int)*n);
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<n;j++)
        {
            if(a[i][j]!=0&&j<i)
                count++;
            if(a[i][j]!=0&&j>n-i-1)
                count1++;
        }
    }
    if(count==count1&&count==0)
        printf("YES\n");
    else if(count!=0&&count1!=0)
        printf("NO\n");
    else
        printf("YES\n");
   
    return 0;
}
发表于 2023-05-10 11:32:09 回复(0)
#include <stdio.h>

int main()
{
    int n;
    int k=0;
    int pos=0;
    scanf("%d",&n);
    int arr[10][10];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(int i=1;i<n;i++)//要比较的行数,注意i代表行数的下标
    {
       for(k=0;k<i;k++)
       {
         if(arr[i][k]!=0)
         {
            pos=1;//一旦pos=1,说明出现了非0的数,已经可以退出循环来打印结果了
            break;
         }
       }
       if(pos==1)
       {
        break;
       }
    }
    if(pos==1)//对结果的判断
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    return 0;
}
发表于 2023-04-13 14:13:48 回复(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 a = 0,i = 0, j = 0, arr[100][100] = { 0 };
    scanf("%d", &a);
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < a; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for (i = 1; i < a; i++)
    {
        for (j = 0; j < i;j++)
        {
            if (arr[i][j] != 0)
                break;
        }
        if (j != i)
            break;
    }
    if (i == a)
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}

发表于 2022-11-20 19:52:20 回复(0)
#include <stdio.h>
#include <stdlib.h>
void init_Array(int n, int **p);
int main(){
    int n, isUpTriangle = 1;
    scanf("%d",&n);
    //动态创建二维数组
    int **p = (int **)malloc(n * sizeof(int *));
    for(int i = 0; i < n; i++){
        p[i] = (int *)malloc((n * sizeof(int)));
    }
    //初始化建立二维数组
    init_Array(n, p);
    //按行优先遍历主对角线以下的元素
    for(int i = 0; i < n; i++){
        for(int j = 0; j < i; j++){
            //若有非零值,跳出循环
            if(p[i][j] != 0){
                isUpTriangle = 0;
                break;
            }
        }
        if(!isUpTriangle){
            break;
        }
    }
    if(isUpTriangle){
        printf("YES\n");
    } else {
        printf("NO\n");
    }
    return 0;
}

void init_Array(int n, int **p){
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            scanf("%d",&p[i][j]);
        }
    }
}
抄袭上一题讨论中的答案,学习建立动态数组
发表于 2022-08-22 13:46:45 回复(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,i,j,flag=0,sum=0;
    scanf("%d",&n);
    int a[n][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;
            }
        }
    }
    for(i=n-1;i>=1;i--){
        sum+=i;
    }
    if(flag==sum){
        printf("YES\n");
    }
    else
        printf("NO\n");
}
发表于 2022-07-25 17:15:52 回复(0)