C++列出 任意二维数组中 在该行最大 该列最小 的元素

【不要使用指针,仅指出错误并改正即可】

#include<stdio.h>
void main()
{
int max(int x,int y);
int min(int x,int y);

int i,j,m,n,q,w,da,xiao;
printf("限制数组i*j: ");
scanf("%d%d",&i,&j);

int k[i][j];
printf("输入数组:\n\n");
for(m=1;m<=i;m++)
{
for(n=1;n<=j;n++)
{
scanf("%d",&k[i][j]);
}
}

printf("\n\n符合条件的元素有:");
for(m=1;m<=i;m++)
{
da=k[m][1];
q=1;
for(n=1;n<=j;n++)
{
if(max(da,k[m][n])==k[m][n]) {q=n;}
da=max(da,k[m][n]);
}
xiao=k[m][q];
for(w=1;w<=i;w++)
{
xiao=min(xiao,k[w][q]);
}
if(da==xiao) {printf(" %d",da);continue;}
}
if(da!=xiao)printf("无符合条件元素");
printf("\n");
}

int max(int x,int y)
{
if(x>y) {return x;}
else {return y;}
}
int min(int x,int y)
{
if(x<y) {return x;}
else {return y;}
}

第1个回答  推荐于2016-07-16
#include<stdio.h>
void main()
{
int max(int x,int y);
int min(int x,int y);

int i,j,m,n,q,w,da,xiao;
printf("限制数组i*j: ");
scanf("%d%d",&i,&j);
bool find=0; //是否找到解

int **k=new int* [i];
for(int p=0;p<i;p++)
{
k[p]=new int[j];
} //上面是建立一个二维动态数组的方法
printf("输入数组:\n\n");
for(m=0;m<i;m++)
{
for(n=0;n<j;n++)
{
scanf("%d",&k[m][n]);
} //数组出界问题,下面的我也改了
}

printf("\n\n符合条件的元素有:");
for(m=0;m<i;m++)
{
da=k[m][1];
q=1;
for(n=0;n<j;n++)
{
if(max(da,k[m][n])==k[m][n]) {q=n;}
da=max(da,k[m][n]);
}
xiao=k[m][q];
for(w=0;w<i;w++)
{
xiao=min(xiao,k[w][q]);
}
if(da==xiao) {printf(" %d",da);find=1;continue;}//有解find=1;就不会输出("无符合条件元素")
}
if(da!=xiao&&find==0)printf("无符合条件元素");//只有找不到时才输出
printf("\n");
}

int max(int x,int y)
{
if(x>y) {return x;}
else {return y;}
}
int min(int x,int y)
{
if(x<y) {return x;}
else {return y;}
}本回答被提问者和网友采纳
第2个回答  2010-12-12
定义数组int k[i][j];
数组范围是 0到i-1 0到j-1
引用k[i][j] 越界了
相似回答