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

如题所述


#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
void search(int **a,int row,int column);
void print(int **p,int row,int column);
int main(int argc, char* argv[])
{
 int nrows,ncolumns,i,l;
    printf("请输入数组大小,即数组的长度以及宽度(以逗号分隔).\n");
    scanf("%d,%d",&nrows,&ncolumns);
    int **array;
 array= (int**)malloc(nrows * sizeof(int*));
    for(i = 0; i < nrows; i++)
    {
        printf("请分别输入第%d行数组元素",i+1);
        array[i] = (int*)malloc(ncolumns * sizeof(int));
        for(l=0;l<ncolumns;l++)
        {
                scanf("%d ",&array[i][l]);
        }
  printf("\n");
    }
 print(array,nrows,ncolumns);
 search(array,nrows,ncolumns);
    free(array);
    return 0;
}
void print(int **p,int row,int column)
{
    int i,j;
    printf("将数组整个输出:");
    for(i=0;i<row;i++)
    {
         for(j=0;j<column;j++)
        {
            printf("a[%d][%d]==%d   ",i,j,p[i][j]);
        }
        printf("\n");
    }
}
void search(int **a,int row,int column)
{
    int i,j,temp,mi,mj;
 bool flag=true;
 mi=0;
 mj=0;
 for(i=0;i<row;i++){
  temp=a[i][0];
  mi=i;
  for(int j=1;j<column;j++)
  {
   if(temp<a[i][j]){
    temp=a[i][j];
    mj=j;
   } 
  }
  for(i=0;i<row;i++){
   if(temp<a[i][mj]){
    flag=false;
    i=mi;
    break;
   }
    
  }
 }
 if(!flag){
  printf("在该数组中没有安点.\n"); 
 }
 else{
  printf("该数组中存在安点,且安点是a[%d][%d]==%d\n",mi,mj,a[mi][mj]);
 }
}

你试试看,我的输入似乎有点问题,我的结果我截个图给你看看

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-04
c++书上一个一样的题目,两次循环
第2个回答  2013-11-04

O(n^3)的不屑于要对吧。。。

那就直接给n^2的了

#include<stdio.h>
int main (void)
{
    int i , j , n ;
    int data[100][100] ;
    int m1[100] , m2[100];
    //readin();
    for (i = 0 ; i < n ; ++i)
    {
        m1[i] = data[i][0];
        m2[i] = data[0][i];
        for (j = 0 ; j < n ; ++j)
        {
            if (m1[i] < data[i][j])
                m1[i] = data[i][j];
            if (m2[i] > data[j][i])
                m2[i] = data[j][i];
        }
    }
    for (i = 0 ; i < n ; ++i)
        for (j = 0 ; j < n ; ++j)
            if (m1[i] == m2[j])
                printf("%d %d\n",i,j);
    return 0;
}

本回答被网友采纳
相似回答