题目:
给定一个三角矩阵,判断其是否为:上三角矩阵、下三角矩阵。
上三角矩阵指主对角线以下的元素都为0的矩阵;
下三角矩阵指主对角线以上的元素都为0的矩阵;
主对角线为从矩阵的左上角至右下角的连线。
输入矩阵是三种情况之一:上三角矩阵、下三角矩阵或者都不是。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。
接下来给出T个矩阵的信息:
每个矩阵信息的第一行给出一个不超过10的正整数n。
随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。
如果输入的矩阵是上三角矩阵,输出"upper",如果输入的矩阵是下三角矩阵,输出"lower",都不是输出"no"。
输入样例:
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
4
1 2 4 0
56 5 7 9
3 4 8 9
0 0 0 0
输出样例:
upper
lower
no
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路:
这段代码的主要功能是判断输入的矩阵是上三角矩阵还是下三角矩阵,或者既不是上三角矩阵也不是下三角矩阵。具体来说,程序首先通过 scanf
函数读取一个整数 n
,表示接下来要读入 n
个矩阵。然后,程序通过嵌套的循环依次读入每个矩阵,并使用两个标志变量 q
和 w
判断该矩阵是否为上三角矩阵或下三角矩阵。最后,程序根据 q
和 w
的值输出相应的结果。
具体实现过程如下:程序使用一个二维数组 a
存储输入的矩阵,其中 a[x][y]
表示矩阵中第 x+1
行第 y+1
列的元素。在读入矩阵后,程序首先使用两个嵌套的循环遍历矩阵的下三角部分(即第 x
行第 y
列的元素,其中 x>y
),如果发现任意一个非零元素,则将标志变量 q
设为 1,并跳出循环。然后,程序使用两个嵌套的循环遍历矩阵的上三角部分(即第 x
行第 y
列的元素,其中 x<y
),如果发现任意一个非零元素,则将标志变量 w
设为 1,并跳出循环。最后,程序根据 q
和 w
的值输出相应的结果。
代码:
cpp
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int m;
int a[100][100] = { 0 };
for (int i = 0; i < n; i++)
{
scanf("%d", &m);
int q = 0;
int w = 0;
int e = 0;
for (int x = 0; x < m; x++)
{
for (int y = 0; y < m; y++)
{
scanf("%d", &a[x][y]);
}
}
for (int x = 0; x < m; x++)
{
for (int y = 0; y < x; y++)
{
if (a[x][y] != 0)
{
q = 1;
break;
}
}
if (q == 1)
{
break;
}
}
for (int x = 0; x < m; x++)
{
for (int y = x + 1; y < m; y++)
{
if (a[x][y] != 0)
{
w = 1;
break;
}
}
if (w == 1)
{
break;
}
}
if (q == 0)
{
printf("upper\n");
}
else if (w == 0)
{
printf("lower\n");
}
else
{
printf("no\n");
}
}
return 0;
}