c语言练习2

2、设二维数组 b[5][4]中有鞍点,即b[i][j]元素值在第i行中最小,且在第j列中最大,试编写一程序找出所有的鞍点,并输出其下标值。也可能没有。

程序1:

#include"stdio.h"

int main()

{

    float b[5][4];   

    int i,j,n,m;

    float min,max;

    for(i=0;i<5;i++)

    for(j=0;j<4;j++)

    scanf("%f",&b[i][j]);

    for(i=0;i<5;i++)

    {

        min=b[i][0];              

        for(j=0;j<4;j++)

        if(b[i][j]<min){

                           min=b[i][j];

                           m=i;

                           n=j;      

                       }

        max=b[m][n];

        for(i=0;i<5;i++)

            if(max>b[i][n])continue;

            else break;

        if(i==5)

        printf("%d,%d/n",m+1,n+1);

    }      

    return 0;

}

程序2(考虑元素相同):

#include<stdio.h>
int main(){
   
    int i,j;
    float b[5][4];
    int temp_i=0,temp_j=0,flag,flag_1=0,t;   
    for(i=0;i<5;i++){
        for(j=0;j<4;j++)
            scanf("%f",&b[i][j]);
        }

    for(i=0;i<5;i++){                                               /*行循环*/
                     temp_i=i;
                     flag=1;
                     for(j=0;j<4;j++)
                     if(b[temp_i][temp_j]>b[i][j])
                     temp_j=j;                                      /*找到行最小值*/
         
                     for(j=0;j<4;j++)
                     if(b[temp_i][temp_j]==b[i][j])                 /*找相同元素*/
                         {             
                          for(t=0;t<5;t++)
                          if(b[t][j]>b[temp_i][j])                  /*列循环*/
                                                 {                  /*找列最大值,条件取反,减少判断次数*/
                                                 flag=0;
                                                 break;
                                                 }
                            if(flag){
                                     printf("(%d,%d)/n",temp_i,j);
                                     flag_1=1;
                                     }
                          }
                       }
   
    if(!flag_1)printf("There is no answer!");
 return 0;   
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值