1( 35分 )
鞍点是指矩阵中的某元素A[i][j]是第i行中值最小的元素,同时又是第j列中值最大的元素。试设计一个算法求矩阵A中的所有鞍点。
void Saddle_Point(int a[N][M])
{ int i,j,k,l,min,min_j[M]={0},flag=2,count;
for(i=0;i<N;i++)
{ min=a[i][0];
count=0;
for(j=0;j<M;j++)
if(a[i][j]<=min)
{ min=a[i][j];
min_j[count]=j;
count++;
}
}
}
for(l=0;l<count;l++)
{ flag=1;
for(k=0;k<N;k++)
if(a[k][min_j[l]]>min) {flag=0; break;}
if(flag) printf("a[%d][%d]=%d\n",i,min_j[l],min);
}
}
if(flag==2) printf("鞍点不存在!");
}
2( 30分 )
设计一个算法,实现将一维数组A(下标从1开始)中的元素循环右移k位,要求只用一个元素大小的辅助空间,并给出算法的时间复杂度。
void RSh(int A[n],int k)
{
for (i=0;i<k;i++)
{ A[0]=A[n];
for (j=n;j>=1;j--)
A[j+1]=A[j];
A[1]=A[0];
}
}