KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)
从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。
3 1 2 3 0 4 5 0 0 6
YES
4 1 2 3 4 5 6 7 8 9 0 11 12 13 0 0 16
NO
#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;
} #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");
}
} #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;
} #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;
} #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;
} #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;
} #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]);
}
}
}
抄袭上一题讨论中的答案,学习建立动态数组