一起找到所有的鞍点
题目
输入n阶方阵,1<n<10,找出所有鞍点即对应下标,没有就输出None!
测试用例:
in:
3
1 2 3 4 5 6 7 8 9
out:
3 02
in:
3
6 5 6 7 6 7 8 6 7
out:
6 00
6 02
in:
3
4 5 7 3 8 5 6 9 4
out: None!
in:
2
1 1 1 1
out:
1 00
1 01
1 10
1 11
/*鞍点*/
#include<stdio.h>
int main (){
int a[10][10], n, i, j, flag = 0, anDian[10], count = 0, r, c, arrC[10], arrR[10];
scanf("%d",&n);
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%d", &a[i][j]);
}
}//输入方阵
for(i = 0; i < n; i++){
//外循环遍历每一行---以下是对每行最大值的小点检查是否列最小
int max = a[i][0];
//假设max是每行第一个数字
for(j = 1; j < n; j++){
//遍历每一行的各个列,看假设true?
if(max < a[i][j]){
max = a[i][j];
}
}//找到了max
for(j = 0; j < n; j++){
flag = 0;
if(a[i][j] == max){
r = i;
c = j;
//记录到每行等于最大值元素的下标
//检验列,是不是最小的
for(int m = 0; m < n; m++){
if(max > a[m][c]){
flag = 1;//这一列存在比max还要小的数字,这一列的其中一个max点没有鞍点
break;
}
}
if(flag == 0){
anDian[count] = max;//记录鞍点
arrR[count] = r;//记录横坐标
arrC[count] = c;//记录列坐标
count ++;
}
}
}
}
if(count == 0){
printf("None!");
}else{
for(int i=0;i<count;i++){
printf("%d %d%d\n",anDian[i],arrR[i],arrC[i]);
}
}
return 0;
}
换成矩阵更好理解一点嘻嘻嘻
#include<stdio.h>
int main (){
int a[10][10], n, i, j, flag = 0, anDian[10], count = 0, r, c, arrC[10], arrR[10], x;
scanf("%d%d",&n,&x);
for(i = 0; i < n; i++){
for(j = 0; j < x; j++){
scanf("%d", &a[i][j]);
}
}//输入方阵
for(i = 0; i < n; i++){
//外循环遍历每一行---以下是对每行最大值的小点检查是否列最小
int max = a[i][0];
//假设max是每行第一个数字
for(j = 1; j < n; j++){
//遍历每一行的各个列,看假设true?
if(max < a[i][j]){
max = a[i][j];
}
}//找到了max
for(j = 0; j < x; j++){
flag = 0;
if(a[i][j] == max){
r = i;
c = j;
//记录到每行等于最大值元素的下标
//检验列,是不是最小的
for(int m = 0; m < x; m++){
if(max > a[m][c]){
flag = 1;//这一列存在比max还要小的数字,这一列的其中一个max点没有鞍点
break;
}
}
if(flag == 0){
anDian[count] = max;//记录鞍点
arrR[count] = r;//记录横坐标
arrC[count] = c;//记录列坐标
count ++;
}
}
}
}
if(count == 0){
printf("None!");
}else{
for(int i=0;i<count;i++){
printf("%d %d%d\n",anDian[i],arrR[i],arrC[i]);
}
}
return 0;
}
标签:count,10,找到,max,C语言,++,int,鞍点
From: https://www.cnblogs.com/GJ504b/p/18593355