牛客网基础编程练习题_1_27

142 阅读2分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」 BC106 上三角矩阵判定

描述

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 = 0;
    //1.输入n的值
    scanf("%d",&n);
    int arr[n][n];//变长数组不可以初始化
    int i = 0;
    //录入数据到n*n矩阵中
    for(i = 0; i < n; i++)
    {
        int j = 0;
        for(j = 0; j < n; j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    //判断是否为上三角矩阵
    //只需要看下三角部分即可(i > j)
      for(i = 0; i < n; i++)
    {
        int j = 0;
        for(j = 0; j < n; j++)
        {
           if(i > j)
           {
               if(arr[i][j] != 0)
               {
                   printf("NO\n");
                   return 0;
                   //直接return更方便,
            //也可以写成break,但跳出去还要判断i==n.j==n
               }
           }
        }
    }
    printf("YES\n");
    return 0;
}
*/

//方法2
int main()
{
    int n = 0;
    //1.输入n的值
    scanf("%d",&n);
    int arr[n][n];//变长数组不可以初始化
    int i = 0;
    int j = 0;
    //录入数据到n*n矩阵中
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    //判断是否为上三角矩阵
    //只需要看下三角部分即可(i > j)
      for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
           if(i > j)
           {
               if(arr[i][j] != 0)
               {
                   printf("NO\n");
                   break;
                   //直接return更方便,
            //也可以写成break,但跳出去还要判断i==n.j==n
                   //而且还要进行两个break,容易出错
               }
           }
        }
       if(i > j)
           {
               if(arr[i][j] != 0)
                   break;
            }
    }
    if(i == n && j == n)
        printf("YES\n");
    return 0;
}

BC107 矩阵转置

描述

KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

输出描述:

输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

示例1

输入:

2 3
1 2 3
4 5 6

复制

输出:

1 4 
2 5 
3 6 

\

#include<stdio.h>
int main()
{
    int n = 0;//行
    int m = 0;//列
    //输入n,m的值
    scanf("%d %d",&n,&m);
    int arr[n][m];
    //为n*m矩阵输入元素
    int i = 0;
    int j = 0;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    //转置
    //打印时,把行->列 列->行即可
    for(i = 0;i < m; i++)
    {
        for(j = 0; j < n; j++)
        {
            printf("%d ",arr[j][i]);
        }
        printf("\n");
    }
    return 0;
}