[2018年最新整理]2010上机测试(二)答案.doc
文本预览下载声明
上机测试(二)
1. 找出一个二维数组(4*4)中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
//第一种解法
void main()
{
int a[4][4]={{21,23,54,32},
{32,45,64,55},
{32,54,70,76},
{22,4,70,76}};
int i,j,k,max,min,flag=0;
for(i=0;i4;i++)
{
max=a[i][0];
for(j=1;j4;j++)
if(a[i][j]max)
{
max=a[i][j];
k=j;
}
min=a[0][k];
for(j=1;j4;j++)
{
if(a[j][k]min)
min=a[j][k];
}
if(max==min)
{
flag=1;
printf(The result is %d,its in row%d,colum%d,min,i,k);
}
}
if(flag==0)
printf(Do not exist such a data.);
}
//第二种解法
void main()
{
int i,j;
int a[4][4]={{1,4,6,2}
,{2,4,7,11}
,{1,5,9,13}
,{7,22,8,8}};
int flag=0;
for(i=0;i4;i++)
for(j=0;j4;j++)
{
if((a[i][j]=a[i][0])(a[i][j]=a[i][1])
(a[i][j]=a[i][2])(a[i][j]=a[i][3])
(a[i][j]=a[0][j])(a[i][j]=a[1][j])
(a[i][j]=a[2][j])(a[i][j]=a[3][j]))
{
printf(the row is:%d\nthe column is:%d\n,i,j);
flag=1;
}
}
if(ad_flag==0)
printf(No an dian!);
}
//改进算法
#define M 4
#define N 4
void main()
{
int h=0,i,j,k,m;
int a[M][N]={{1,4,6,2},
{2,4,7,11},
{1,5,9,13},
{7,22,8,8}};
for(i=0;iM;i++)
for(j=0;jN;j++)
{
m=0;
for(k=0;kN;k++)
{
if(a[i][j]=a[i][k])
m++;
}
if(m!=N)
continue;
else
{
m=0;
for(k=0;kM;k++)
{
if(a[i][j]=a[k][j])
m++;
}
if(m==M)
{
printf(第%d行第%d列%4d是鞍点\n,i+1,j+1,a[i][j]);
h++;
}
else
continue;
}
}
if(h==0)
{
printf(没有鞍点);
}
else
{
printf(一共有%d个鞍点,h);
}
}
//第三种解法
#define N 4
int i,j,flag=0;
int arr[N][N];
int arr_max(int arr[N][N]);
int arr_min(int arr[N][N]);
void main()
{
printf(请输入一个四维数组:\n);
for(i=0;iN;i++)
{
printf(请输入第%d行的数字:,i+1);
for(j=0;jN;j++)
{
scanf(%d,arr[i][j]);
}
}
for(i=0;iN;i++)
for(j=0;jN;j++)
if(arr_max(arr)arr_min(arr))
{
printf(鞍点为:%d,在数组的第%d行,第%d列\n,arr[i][j],i+1,j+1);
flag=1;
}
if(!flag)
printf(该数组不存在鞍点
显示全部