完整word版习题答案第四章算法设计与分析吕国英.docx

上传人:b****5 文档编号:4819659 上传时间:2022-12-09 格式:DOCX 页数:25 大小:23.97KB
下载 相关 举报
完整word版习题答案第四章算法设计与分析吕国英.docx_第1页
第1页 / 共25页
完整word版习题答案第四章算法设计与分析吕国英.docx_第2页
第2页 / 共25页
完整word版习题答案第四章算法设计与分析吕国英.docx_第3页
第3页 / 共25页
完整word版习题答案第四章算法设计与分析吕国英.docx_第4页
第4页 / 共25页
完整word版习题答案第四章算法设计与分析吕国英.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

完整word版习题答案第四章算法设计与分析吕国英.docx

《完整word版习题答案第四章算法设计与分析吕国英.docx》由会员分享,可在线阅读,更多相关《完整word版习题答案第四章算法设计与分析吕国英.docx(25页珍藏版)》请在冰豆网上搜索。

完整word版习题答案第四章算法设计与分析吕国英.docx

完整word版习题答案第四章算法设计与分析吕国英

算法设计与分析(第二版)

习题答案

第四章

1.

#includeintmain(void){

intbuf[100];

intn;

inti,j,k;

scanf("%d",&n);for(i=0;i

for(i=0;i

{

buf[j]+=2;

for(j=0;j

{

if(buf[j]>=10)

{

buf[j+1]+=buf[j]/10;

buf[j]=buf[j]%10;

}

}for(i=n-1;i>=0;i--)printf("%d",buf[i]);

printf("\n");return0;

}2.

#includeintmain(void)

{

intn=2;

inti;

for(i=1;i<=9;i++)

{

n=(n+2)*2;

}

printf("%d\n",n);

return0;

3.

#includeintmain(void){

inta=54;

intn;

intm;

printf("计算机先拿3张牌\n");

a=a-3;

while(a>=0){

printf("还剩%d张牌\n",a);

printf("你拿几张?

请输入:

");

scanf("%d",&n);if(n>4||n<1||n>a)

错误!

重新拿牌\n");

{printf("continue;

a=a-n;

printf("if(a==0)break;

a=a-m;

}

return0;

}

4.

#includeintd;

inta1,a2;

intfun(intn);

intmain(void){intn;printf("n=?

d=?

a仁?

a2=?

");

scanf("%d%d%d%d\n",&n,&d,&a1,&a2);printf("%d\n",fun(n));

return0;

}

intfun(intn)

{if(n==1)returna1;

if(n==2)returna2;

returnfun(n-2)-(fun(n-1)-d)*2;

}

5.

#includecharchess[8][8];

intis_safe(introw,intcol);

intqueen(introw,intcol,intn);

intmain(void)

{inti,j;

for(i=0;i<8;i++)for(j=0;j<8;j++)chess[i][j]='X:

queen(0,0,0);

for(i=0;i<8;i++){fora=0;j<8;j++)

printf("%c",chess[i][j]);

printf("\n");

}

return0;

intis_safe(introw,intcol){

inti,j;

for(i=0;i<8;i++)

{

if(chess[row][i]==Q)return0;if(chess[i][col]==Q)

return0;

i=row;

j=col;

while(i!

=-1&&j!

=-1)

{

if(chess[i--][H==Q)return0;

i=row;

j=col;

while(i!

=-1&&j!

=8){

if(chess[i--][j++]==Q)return0;

}

i=row;

j=col;

while(i!

=8&&j!

=-1){if(chess[i++][jT==Q)return0;

}i=row;

j=col;

while(i!

=8&&j!

=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;

for(i=0;i<8;i++)

for(j=0;j<8;j++)

resu-f+Hqueen(i-j-n+」=

if(resu-t>0)

break-

if(resu-t>0)

refurn1-

e-se

宀chessrow=co-px「

refurnq

e-se

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=

refurnq

7.

巷nc-udeAsfdicLhv

infmain(void)宀三二

ror(n1=AH10000=++)

ir(i&2H1炉史&3X2炉史&5X4炉空&6X5炉史&7HH0)

prin犬-&2rrD

refurnq

 

8.

#includeintmain(void)

{

inti;

intsum;

inta1,a2,a3,a4;

for(i=1000;i<=9999;i++)

{

a1=i%10;

a2=i/10%10;

if(a1!

=a2){

a3=i/100%10;if(a1!

=a3&&a2!

=a3){

a4=i/1000;

if(a1!

=a4&&a2!

=a4&&a3!

=a4)

{

Sum=(a1+a2+a3+a4)*(a1+a2+a3+a4);

if(i%sum==0)printf("%d\n",i);

}

}

}

}

return0;

}

9.

#include#defineN10voidmax_min(int*a,intm,intn,int*min1,int*min2,int*max1,int*max2);

intmain(void)

{

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);

return0;

}

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]

*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];

}

}

else{

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

if(lmin2

*min1=lmin1;

*min2=lmin2;

}

else{

*min1=lmin1;

*min2=rmin1;

elseif(rmin2vlmin1)

{

*min1=rmin1;

*min2=rmin2;

}else{

*min1=rmin1;

*min2=lmin1;

}

if(lmax1>rmax1){if(lmax2>rmax1){

*max1=lmax1;

*max2=lmax2;

}else{

*max1=lmax1;

*max2=rmax1;

elseif(rmax2>lmax1)

{*max1=rmax1;

*max2=rmax2;

}else

*max1=rmax1;

*max2=lmax1;

}

}

}

10.

#includeintadd(int*a,intflag,intright);

intmain(void){

inta[10]={123,4,5,6,7,8,9,10};

intsum=add(a,0,9);

printf("%d\n",sum);

return0;

}

intadd(int*a,intflag,intright)

{

intmid;

if(flag==right)

{

returna[flag];

}

elseif(flag==right-1)

{

returna[flag]+a[right];

}

else{

mid=(flag+right)/2;

returnadd(a,flag,mid)+add(a,mid+1,right);

}

}

11.

#includeintmain(void)

{

inta[5][3]={{-50,17,-42},{-47,-19,-3},{36,-34,-43},{-30,-43,34},

{-23,-8,-45}

};

inti,j;

intmax,n;

intsum=0;for(i=0;i<5;i++){

max=a[i][0];n=0;

for(j=1;j<3;j++){if(a[i][j]>max)

{

max=a[i][j];n=j;

}

}sum+=max;

printf("a[%d][%d]=%d\n",i,n,max);

}

printf("%d\n",sum);

return0;

12.

/**File:

newmain.c*Author:

nirnava

*Createdon2010年4月22日,下午&21*/

#include#include#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);

for(i=0;i

printf("%5d",mul3[i]);

if((i+1)%N==O)printf("\n");

}return0;

}

voidmatrix_add_sub(int*A,int*B,int*C,intm,charch)

{

inti;

for(i=0;i

{

if(ch=='+')

C[i]=A[i]+B[i];

else

C[i]=A[i]-B[i];

}

}

voidupdate_half_value(int*A,int*B,intm)

{

inti,j;

for(i=0;ivm/2;i++)

{

for(j=0;j

{

B[i*m+j]=A[i*m/2+j];

}

}

}

voidget_half_value(int*A,int*B,intm)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

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;

}

else{

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);

return;

}

}

13.

#includeintmain(void)

{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;

for(i=0;i<6;i++)

fora=0;j<7;j++){

b[i][j]=a[i][j];c[i][j]=-1;

}

for(i=1;i<5;i++){for(j=0;j<7;j++)

{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)

{max=b[i][j]+b[i-1][k];flag=k;

}

}

}b[i][j]=max;c[i][j]=flag;

}

}for(j=1;j<=5;j++)

{

max=0;

for(k=j-2;kv=j+2;k++)

{if(k<0)continue;elseif(k>6)break;

else{

if(b[i][j]+b[i-1][k]>max){

max=b[i][j]+b[i-1][k];

flag=k;

}

}

}b[i][j]=max;

c[i][j]=flag;

}

max=0;

for(j=1;j<=5;j++)

{if(b[i][j]>max)

{

max=b[i][j];flag=j;

}

}

printf("%d\n",max);

temp=c[i][flag];

printf("%5d",a[i][temp]);

for(j=i;j>0;j--){

temp=c[j][temp];printf("%5d",a卜1][temp]);}

printf("\n");

return0;

}

14.

#includeintmain(void)

{

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];

intmax;

intflag;

inti,j,k;

for(i=0;i<=5;i++)

{

max=0;

for(j=0;j<=i;j++)

{

AB[i][j]=A[i-j]+B[j];if(AB[i][j]>max)max=AB[i][j];

}

temp[i]=max;

}

max=0;

for(i=0;i<=5;i++)

{

abc[i]=temp[i]+C[5-i];

if(abc[i]>max)

{

max=abc[i];

flag=i;

}

}

printf("max=%d\n",max);printf("c=%d\n",5-flag);

max=max-C[5-flag];

for(i=0;i<=flag;i++)

{

if(AB[flag][i]==max)

{

printf("b=%d\n",i);

printf("a=%d\n",flag-i);break;

}

}

return0;

}

16.

#include#defineN100intsearch(int*a,intleft,intright);intsum_buf(int*a,intleft,intright);intmain(void)

{

inta[N];

inti;

ints;

for(i=O;i

a[i]=1;

a[24]=2;

s=search(a,0,N-1);

printf("%d\n",s);

return0;

}

intsum_buf(int*a,intleft,intright)

{

inti;

intsum=0;

for(i=left;i<=right;i++)sum+=a[i];returnsum;

}

intsearch(int*a,intleft,intright){

intmid=(left+right)/2;

if(left==right-1)

{

if(a[left]

returnright;

elsereturnleft;

}

if(mid*2!

=(right+left-1))

{

if(sum_buf(a,left,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1