找出一个2*6的二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
**输入提示信息:无
**输入格式要求:%d
**输出格式要求:若存在鞍点,则输出格式用"%d\n",若没有鞍点,则输出"no saddle point\n"
程序运行示例1:
11 2 66 4 7 6
54 4 6 7 77 4
no saddle point
程序运行示例2:
3 6 3 7 3 5
11 23 23 33 11 21
7
#include <stdio.h>
#include <stdlib.h>
int findmax(int (*p)[6],int i){
int pos=0,j;
for(j=0;j<6;j++){
if(p[i][j]>p[i][pos]){
pos=j;
}
}
return pos;
}
int min(int (*p)[6],int maxpos,int line){
int x=1-line;
if(p[x][maxpos]<=p[line][maxpos])return 0;
return 1;
}
int main()
{
int i,j,maxpos,flag=0;
int c[2][6]={0};
for(i=0;i<2;i++){
for(j=0;j<6;j++){
scanf("%d",&c[i][j]);
}
}
for(i=0;i<2;i++){
maxpos=findmax(c,i);
if(min(c,maxpos,i)){
printf("%d\n",c[i][maxpos]);
flag=1;
}
}
if(!flag){
printf("no saddle point\n");
}
return 0;
}
答案:
#include<stdio.h>
main( )
{
int n,spoint,i,j,max,pos;
int find=0;
int arry[2][6];
for(i=0;i<2;++i)
{
for(j=0;j<6;j++) //1
{
scanf("%d",&arry[i][j]);
}
}
for(i=0;i<2;++i)
{
max=arry[i][0];
for(j=0;j<6;++j) //1
{
if(max<arry[i][j]) //1
{
max=arry[i][j];
pos = j;
}
}
if(arry[(i+1)%2][pos]>max) //1
{
printf("%d\n",max); //1
find = 1;
}
}
if(!find)
printf("no saddle point\n");
}