在二维数组中查找这样的数,它所在的行的平均值最大,所在列的平均值最小。
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
int main()
{
int a[4][4] = {
8,7,4,5,
5,6,3,1,
9,5,9,4,
8,3,6,7
};
int x,y,i,j,s,max=-999999,min=999999;
float avg;
for (i = 0; i < 4; i++)
{
s = 0;
for (j = 0; j < 4; j++)
s += a[i][j];
avg = s / 4.0;
if (avg>max){
max = avg;
x = i;
}
}
for (i = 0; i < 4; i++)
{
s = 0;
for (j = 0; j < 4; j++)
s += a[j][i];
avg = s / 4.0;
if (avg<min){
min = avg;
y = i;
}
}
printf("x=%d\n",x);
printf("y=%d\n",y);
printf("a[x][y]=%d\n",a[x][y]);
return 0;
}
参考一下实现鞍点的代码:
#include "stdio.h"
void main()
{
/*
电子书7.8
*/
int a[4][4]={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13,14, 15, 16}
};
int i,j,k;
int flag=0;
int flag2=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++)
{
flag=0;
flag2=0;
//按行找,是不是最大
for(k=0;k<4;k++)
{
if(a[i][j]<a[i][k]){
flag=1; //不是最大
break;
}
}
//按列找,是不是最小
for(k=0;k<4;k++)
{
if(a[i][j]>a[k][j]){
flag2=1; //不是最小
break;
}
}
if(flag==0 && flag2==0){
printf("%d是鞍点\n",a[i][j]);
}
}
}
}