刚学数组,不知道怎么弄这个记行号列号,还有这个没有鞍点,人晕了
我的思路如下:
1、申请一块内存用于存储m*n个整数,然后用一个int指针指向它,以便访问数据.
2、通过外层for循环遍历每一行,然后用两个内层for循环遍历找出所在行的最大值,即判断再所在列是否为最小值,如果是的,则打印它的行列,及其值。
3、如果遍历完所有整数,都没有找到靶点,则输出“No”.
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int m,n;
scanf("%d%d",&m,&n);
//printf("m=%d,n=%d\n",m,n);
int * p = (int*)malloc(sizeof(int)*(m*n)); //申请一块内存用于存储m*n个整数
for(int i=0;i<m;i++){ //从输入获取m*n个整数
for(int j=0;j<n;j++){
scanf("%d",((p+i*n)+j));
}
}
// printf("输入的数组为:\n");
// for(int i=0;i<m;i++){
// for(int j=0;j<n;j++){
// printf("%d ",*((p+i*n)+j));
// }
// printf("\n");
// }
int target=0;
for(int i=0;i<m;i++){
int max=*(p+i*n+0);
int maxIndex=0;
// printf("i=%d,",i);
for(int j=0;j<n;j++){
//printf("j=%d,",j);
//寻找数组每行最大的数
if(max<*(p+i*n+j)){
max=*(p+i*n+j);
maxIndex = j;
}
}
target=1;
//然后找出最大的这个数在所在的列是否为最小
for(int k=0;k<m;k++){
// printf("k=%d,",k);
if(max>=*(p+k*n+maxIndex)){
target=0;
}
}
//如果在所在行最大, 在所在的列最小 ,即为所寻找的靶点,打印打印它的行列,及其值
if(target==1){
printf("%d %d %d\n",(i+1),(maxIndex+1),max);
}
// printf("i=%d,finished!\n",i);
}
if(target==0){
printf("No");
}
return 0;
}