找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有。

第一种方法
思路:依次找出每的最大元素,再判断列上该元素是否最小。依次执行。

#include<stdio.h>
int main()
{
    int ctu;
    do
    {        //begin
        int a[18][18],i,j,b,c=0,d,m,n;        //b用来标记,c用来计数,d是另外的循环控制
        printf("请自定义数组大小,如3*4\n");
        scanf("%d*%d",&m,&n);
        printf("请输入一个%d×%d的二维数组\n",m,n);
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                scanf("%d",&a[i][j]);        //输入数组
        for(i=0;i<m;i++)                //第一层循环,控制行
            for(j=0;j<n;j++)            //第二层循环,控制列
            {
                b=1;                    //先前的错误就在于此,要重置b为1
                for(d=0;d<n;d++)        //判断是否行上最大
                    if(a[i][j]<a[i][d]) //for循环释义为 有a[i][d]>a[i][j]则不满足a[i][j]是在行上最大的数,所以用continue使j++,移到下个元素
					  {b=0;}
                if(b==0) 
				{continue;}//跳的是j++
                for(d=0;d<m;d++)        //判断是否列上最小
                    if(a[i][j]>a[d][j]) b=0;
                if(b==0) 
				  {continue;}
                c++;
                printf("第%d个鞍点:%d,位于第%d行、第%d列\n",c,a[i][j],i+1,j+1);
            }
        if(c==0)printf("该二维数组没有鞍点");
        else printf("该数组有%d个鞍点",c);
    printf("\n是否继续?\n输入1继续,否则任意键退出\n");        //end
    scanf("%d",&ctu);
    }while(ctu==1);
    return 0;
}

第二种方法
思路:同过一个行for循环 找行最大值出来,在去与行对比

#include<stdio.h>
void main()
{
  int i,j,a[18][18],n,m,k,maxj=0,mini=0,max,min;
   printf("请自定义数组大小,如3*4\n");
     scanf("%d*%d",&m,&n);
       
	    printf("请输入一个%d×%d的二维数组\n",m,n);
        for(i=0;i<m;i++)
         for(j=0;j<n;j++)
           scanf("%d",&a[i][j]);
    for(i=0;i<m;i++)
	 {  
	   for(j=0;j<n;j++)
	     if(a[i][maxj]<a[i][j])
		 {
		  maxj=j;
		  a[i][maxj]=a[i][j];
		 }
		 max=a[i][maxj];//记录行最大的值
		
		for(k=0;k<m;k++)
		 if(a[k][maxj]<a[i][maxj])
		   {
		     mini=k;
			 a[i][maxj]=a[k][maxj];
           }
		    min=a[i][maxj];
		 if(min==max)  //continue;
	   printf("函数的鞍点i=%d j=%d %d\n",i,j,a[i][maxj]);
	   else
	   continue;
	  }
}	  
      
		  

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值