「这是我参与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;
}