简单问题请指点一下
/*这个程序的目的是找出一个方正中行最大,列最小的数*/
#include "stdio.h "
#include "stdlib.h "
#define L 4/*假设是4行4列*/
#define R 4
void fun(int p[L][R])
{ int l[L],r[R],res[L][R];/*res数组用来放满足要求的数*/
int i,j,k,m,n;
for(i=0;i <R;i++)/*在每一行中找出最大的数*/
for(j=0;j <R-1;j++)
{
for(m=0,n=j;m <R;m++)
if(p[i][n] <p[i][m])
n=m;
r[i]=p[i][m];
}
for(i=0;i <L;i++)/*在每一列中找出最小的数*/
for(j=0;j <L-1;j++)
{
for(m=0,n=j;m <L;m++)
if(p[n][i]> p[m][i])
n=m;
l[i]=p[m][i];
}
putchar( '\n ');
for(i=0;i <L;i++)
for(j=0;j <R;j++)
if(r[j]==l[i])/*如果先找的行中的数和列中的数想的话就满足要求*/
{ res[i][j]=r[j];
printf( "res[%d][%d]=%d\n ",i,j,r[j]);
}
}
void main()
{ int a[L][R],i,j;
for(i=0;i <L;i++)
for(j=0;j <R;j++)
a[i][j]=random(21);
printf( "The square is: \n\n\n ");/*输出随机方正*/
for(i=0;i <L;i++)
{
for(j=0;j <R;j++)
printf( "%d ",a[i][j]);
putchar( '\n ');
}
fun(a);
getch();
}
[解决办法]
LZ的算法有问题,我根据LZ的意思修改了一下。不过大部分情况下是没有结果的,因为行最大了,列不一定最小。有时候会有多解。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
#define L 4
#define R 4
void fun(int p[L][R])
{
bool flag = false;
int l[L],r[R];
int i,j,k,m;
for(i=0;i <R;i++)
for(j=0,m=0;j <L;j++)
{
if(p[i][m] <p[i][j])
m=j;
r[i]=p[i][m];
}
for(i=0;i <L;i++)
for(j=0,m;j <R;j++)
{
if(p[m][i]> p[j][i])
m=j;
l[i]=p[m][i];
}
putchar( '\n ');
for(i=0;i <L;i++)
for(j=0;j <R;j++)
if(r[j]==l[i])
{
flag = true;
printf( "res[%d][%d]=%d\n ",j,i,r[j]);
}
if(!flag) printf( "sorry, no solution! ");
}
void main()
{
int a[L][R],i,j;
srand((unsigned)time(0));
for(i=0;i <L;i++)
for(j=0;j <R;j++)
a[i][j]=rand()%21;
printf( "The square is: \n\n\n ");
for(i=0;i <L;i++)
{
for(j=0;j <R;j++)
printf( "%d\t ",a[i][j]);
putchar( '\n ');
}
fun(a);
getch();
}