完整word版习题答案第四章算法设计与分析吕国英Word文件下载.docx
《完整word版习题答案第四章算法设计与分析吕国英Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版习题答案第四章算法设计与分析吕国英Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
n=(n+2)*2;
%d\n"
n);
return0;
3.
inta=54;
intm;
printf("
计算机先拿3张牌\n"
a=a-3;
while(a>
=0){
还剩%d张牌\n"
a);
printf("
你拿几张?
请输入:
"
if(n>
4||n<
1||n>
a)
错误!
重新拿牌\n"
{printf("
continue;
a=a-n;
if(a==0)break;
a=a-m;
4.
intd;
inta1,a2;
intfun(intn);
intmain(void){intn;
printf("
n=?
d=?
a仁?
a2=?
%d%d%d%d\n"
n,&
d,&
a1,&
a2);
printf("
fun(n));
intfun(intn)
{if(n==1)returna1;
if(n==2)returna2;
returnfun(n-2)-(fun(n-1)-d)*2;
5.
charchess[8][8];
intis_safe(introw,intcol);
intqueen(introw,intcol,intn);
intmain(void)
{inti,j;
8;
i++)for(j=0;
j++)chess[i][j]='
X:
queen(0,0,0);
i++){fora=0;
%c"
chess[i][j]);
intis_safe(introw,intcol){
inti,j;
if(chess[row][i]==Q)return0;
if(chess[i][col]==Q)
i=row;
j=col;
while(i!
=-1&
&
j!
=-1)
if(chess[i--][H==Q)return0;
=8){
if(chess[i--][j++]==Q)return0;
=8&
=-1){if(chess[i++][jT==Q)return0;
}i=row;
=8)
if(chess[i++][j++]==Q)return0;
return1;
intqueen(introw,intcol,intn){inti,j;
intresult=0;
if(n==8)return1;
elseif(is_safe(row,col))
chess[row][col]=Q;
resu-f+Hqueen(i-j-n+」=
if(resu-t>
0)
break-
refurn1-
e-se
宀chessrow=co-px「
refurnq
returnq
6.
巷nc-udeAsfdicLhv
infmain(void)宀infi-LK
for(n1
for〒1
kh33=++)
:
5£
++)
宀
kulooir
ir(k&
2H0)
ir(3丿+2*j+k/2K100)
prinW汁也&
d云召也&
2n&
2nvAn=-LLk=
7.
infmain(void)宀三二
ror(n1=AH10000=++)
ir(i&
2H1炉史&
3X2炉史&
5X4炉空&
6X5炉史&
7HH0)
prin犬-&
2rrD
8.
intmain(void)
intsum;
inta1,a2,a3,a4;
for(i=1000;
=9999;
a1=i%10;
a2=i/10%10;
if(a1!
=a2){
a3=i/100%10;
if(a1!
=a3&
a2!
=a3){
a4=i/1000;
=a4&
a3!
=a4)
Sum=(a1+a2+a3+a4)*(a1+a2+a3+a4);
if(i%sum==0)printf("
i);
9.
#defineN10voidmax_min(int*a,intm,intn,int*min1,int*min2,int*max1,int*max2);
inta[N]={2,3,4,5,34,7,9,6,43,21};
intmin1,min2;
intmax1,max2;
max_min(a,0,N-1,&
min1,&
min2,&
max1,&
max2);
printf("
min1=%d\nmin2=%d\nmax1=%d\nmax2=%d\n"
min1,min2,max1,max2);
voidmax_min(int*a,intm,intn,int*min1,int*min2,int*max1,int*max2){
intlmin1,lmin2,lmax1,lmax2;
intrmin1,rmin2,rmax1,rmax2;
intmid;
if(m==n)
*min1=*min2=*max1=*max2=a[m];
}elseif(m==n-1)
if(a[m]<
a[n]){
*min1=a[m];
*min2=a[n];
*max1=a[n];
*max2=a[m];
else{
*min1=a[n];
*min2=a[m];
*max1=a[m];
*max2=a[n];
mid=(m+n)/2;
max_min(a,m,mid,&
lmin1,&
lmin2,&
lmax1,&
lmax2);
max_min(a,mid+1,n,&
rmin1,&
rmin2,&
rmax1,&
rmax2);
if(lmin1<
rmin1){
if(lmin2<
*min1=lmin1;
*min2=lmin2;
*min2=rmin1;
elseif(rmin2vlmin1)
*min1=rmin1;
*min2=rmin2;
}else{
*min2=lmin1;
if(lmax1>
rmax1){if(lmax2>
rmax1){
*max1=lmax1;
*max2=lmax2;
*max2=rmax1;
elseif(rmax2>
lmax1)
{*max1=rmax1;
*max2=rmax2;
}else
*max1=rmax1;
*max2=lmax1;
10.
intadd(int*a,intflag,intright);
intmain(void){
inta[10]={123,4,5,6,7,8,9,10};
intsum=add(a,0,9);
sum);
intadd(int*a,intflag,intright)
if(flag==right)
returna[flag];
elseif(flag==right-1)
returna[flag]+a[right];
mid=(flag+right)/2;
returnadd(a,flag,mid)+add(a,mid+1,right);
11.
inta[5][3]={{-50,17,-42},{-47,-19,-3},{36,-34,-43},{-30,-43,34},
{-23,-8,-45}
};
intmax,n;
intsum=0;
5;
i++){
max=a[i][0];
n=0;
for(j=1;
3;
j++){if(a[i][j]>
max)
max=a[i][j];
n=j;
}sum+=max;
a[%d][%d]=%d\n"
i,n,max);
12.
/**File:
newmain.c*Author:
nirnava
*Createdon2010年4月22日,下午&
21*/
#include<
stdlib.h>
#defineN4voidmatrix_mul(int*mul1,int*mul2,int*mul3,intlength);
voidmatnx_add_sub(int*A,int*B,int*C,intm,charch);
voidupdate_half_value(int*A,int*B,intm);
voidget_half_value(int*A,int*B,intm);
intmain(void){inti,j;
intmul1[N*N]={123,4,5,6,7,8,9,10,1,2,3,4,5,6};
intmul2[N*N]={7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2};
intmul3[N*N];
matrix_mul(mul1,mul2,mul3,N);
N*N;
%5d"
mul3[i]);
if((i+1)%N==O)printf("
}return0;
voidmatrix_add_sub(int*A,int*B,int*C,intm,charch)
m*m;
if(ch=='
+'
)
C[i]=A[i]+B[i];
else
C[i]=A[i]-B[i];
voidupdate_half_value(int*A,int*B,intm)
ivm/2;
m/2;
B[i*m+j]=A[i*m/2+j];
voidget_half_value(int*A,int*B,intm)
A[i*m/2+j]=B[i*m+j];
voidmatrix_mul(int*A,int*B,int*C,intm)
if(m==2)
intD,E,FGH,I,J;
D=A[0]*(B[1]-B[3]);
E=A[3]*(B[2]-B[0]);
F=(A[2]+A[3])*B[0];
G=(A[0]+A[1])*B[3];
H=(A[2]-A[0])*(B[0]+B[1]);
l=(A[1]-A[3])*(B[2]+B[3]);
J=(A[0]+A[3])*(B[0]+B[3]);
C[0]=E+I+J-G;
C[1]=D+G;
C[2]=E+F;
C[3]=D+H+J-F;
return;
intA1[m*m/4],A2[m*m/4],A3[m*m/4],A4[m*m/4];
intB1[m*m/4],B2[m*m/4],B3[m*m/4],B4[m*m/4];
intC1[m*m/4],C2[m*m/4],C3[m*m/4],C4[m*m/4];
intD[m*m/4],E[m*m/4],F[m*m/4],G[m*m/4],H[m*m/4],l[m*m/4],J[m*m/4];
inttemp1[m*m/4],temp2[m*m/4];
get_half_value(A1,&
A[0],m);
get_half_value(A2,&
A[m/2],m);
get_half_value(A3,&
A[m*m/2],m);
get_half_value(A4,&
A[m*m/2+m/2],m);
get_half_value(B1,&
B[0],m);
get_half_value(B2,&
B[m/2],m);
get_half_value(B3,&
B[m*m/2],m);
get_half_value(B4,&
B[m*m/2+m/2],m);
matrix_add_sub(B2,B4,temp1,m/2,'
-'
matrix_mul(A1,temp1,D,m/2);
matrix_add_sub(B3,B1,temp1,m/2,'
matrix_mul(A4,temp1,E,m/2);
matrix_add_sub(A3,A4,temp1,m/2,'
matrix_mul(temp1,B1,F,m/2);
matrix_add_sub(A1,A2,temp1,m/2,'
matrix_mul(temp1,B4,G,m/2);
matrix_add_sub(A3,A1,temp1,m/2,'
matrix_add_sub(B1,B2,temp2,m/2,'
matrix_mul(temp1,temp2,H,m/2);
matrix_add_sub(A2,A4,temp1,m/2,'
matrix_add_sub(B3,B4,temp2,m/2,'
matrix_mul(temp1,temp2,I,m/2);
matrix_add_sub(A1,A4,temp1,m/2,'
matrix_add_sub(B1,B4,temp2,m/2,'
matrix_mul(temp1,temp2,J,m/2);
matrix_add_sub(E,I,temp1,m/2,'
matrix_add_sub(J,G,temp2,m/2,'
matrix_add_sub(temp1,temp2,C1,m/2,'
matrix_add_sub(D,G,C2,m/2,'
matrix_add_sub(E,F,C3,m/2,'
matrix_add_sub(D,H,temp1,m/2,'
matrix_add_sub(J,F,temp2,m/2,'
matrix_add_sub(temp1,temp2,C4,m/2,'
update_half_value(C1,&
C[0],m);
update_half_value(C2,&
C[m/2],m);
update_half_value(C3,&
C[m*m/2],m);
update_half_value(C4,&
C[m*m/2+m/2],m);
13.
{inta[6][7]={
{16,4,3,12,6,0,3},
{4,-5,6,7,0,0,2},{6,0,-1,-2,3,6,8},
{5,3,4,0,0,27},{-1,7,4,0,7,-5,6},
{0,-1,3,4,12,4,2}};
intb[6][7],c[6][7];
inti,j,k;
intmax;
intflag;
inttemp;
6;
fora=0;
7;
j++){
b[i][j]=a[i][j];
c[i][j]=-1;
{max=0;
for(k=j-2;
k<
=j+2;
k++){
if(k<
0)continue;
elseif(k>
6)break;
else{
if(b[i][j]+b[i-1][k]>
{max=b[i][j]+b[i-1][k];
flag=k;
}b[i][j]=max;
c[i][j]=flag;
}for(j=1;
=5;
max=0;
kv=j+2;
k++)
{if(k<
elseif(k>
max){
max=b[i][j]+b[i-1][k];
flag=k;
c[i][j]=flag;
{if(b[i][j]>
max=b[i][j];
flag=j;
max);
temp=c[i][flag];
a[i][temp]);
for(j=i;
j>
0;
j--){
temp=c[j][temp];
printf("
a卜1][temp]);
}
14.
intA[6]={0,3,7,9,12,13};
intB[6]={0,5,10,11,11,11};
intC[6]={0,4,6,11,12,12};
intAB[6][6];
inttemp[6];
intabc[6];
=i;
AB[i][j]=A[i-j]+B[j];
if(AB[i][j]>
max)max=AB[i][j];
temp[i]=max;
abc[i]=temp[i]+C[5-i];
if(abc[i]>
max=abc[i];
flag=i;
max=%d\n"
c=%d\n"
5-flag);
max=max-C[5-flag];
=flag;
if(AB[flag][i]==max)
b=%d\n"
a=%d\n"
flag-i);
break;
16.
#defineN100intsearch(int*a,intleft,intright);
intsum_buf(int*a,intleft,intright);
inta[N];
ints;
for(i=O;
N;
a[i]=1;
a[24]=2;
s=search(a,0,N-1);
s);
intsum_buf(int*a,intleft,intright)
for(i=left;
=right;
i++)sum+=a[i];
returnsum;
intsearch(int*a,intleft,intright){
intmid=(left+right)/2;
if(left==right-1)
if(a[left]<
a[right])
returnright;
elsereturnleft;
if(mid*2!
=(right+left-1))
if(sum_buf(a,left,