习题答案第四章算法设计与分析吕国英Word文档格式.docx
- 文档编号:17356066
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:40.61KB
习题答案第四章算法设计与分析吕国英Word文档格式.docx
《习题答案第四章算法设计与分析吕国英Word文档格式.docx》由会员分享,可在线阅读,更多相关《习题答案第四章算法设计与分析吕国英Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
2.
intmain(void)
{
intn=2;
inti;
i=row;
j=col;
while(i!
=-1&
&
j!
=-1)
if(chess[i--][j--]=='
Q'
)
}
=8)
if(chess[i--][j++]=='
=8&
if(chess[i++][j--]=='
if(chess[i++][j++]=='
return1;
intqueen(introw,intcol,intn)
inti,j;
intresult=0;
if(n==8)
else
if(is_safe(row,col))
chess[row][col]='
;
8;
i++)
j++)
result+=queen(i,j,n+1);
if(result>
0)
break;
X'
6.
for(i=1;
=33;
for(j=1;
=50;
k=100-i-j;
if(k%2==0)
if(3*i+2*j+k/2==100)
大马%d\n中马%d\n小马%d\n\n\n"
i,j,k);
7.
=10000;
if(i%2==1&
i%3==2&
i%5==4&
i%6==5&
i%7==0)
%d\n"
i);
8.
intsum;
inta1,a2,a3,a4;
for(i=1000;
=9999;
a1=i%10;
a2=i/10%10;
if(a1!
=a2)
a3=i/100%10;
=a3&
a2!
=a3)
a4=i/1000;
=a4&
a3!
=a4)
sum=(a1+a2+a3+a4)*(a1+a2+a3+a4);
if(i%sum==0)
9.
#defineN10
voidmax_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);
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];
else
if(m==n-1)
if(a[m]<
a[n])
*min1=a[m];
*min2=a[n];
*max1=a[n];
*max2=a[m];
*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;
if(rmin2<
lmin1)
*min1=rmin1;
*min2=rmin2;
*min2=lmin1;
if(lmax1>
rmax1)
if(lmax2>
*max1=lmax1;
*max2=lmax2;
*max2=rmax1;
if(rmax2>
lmax1)
*max1=rmax1;
*max2=rmax2;
*max2=lmax1;
10.
intadd(int*a,intflag,intright);
inta[10]={1,2,3,4,5,6,7,8,9,10};
intsum=add(a,0,9);
sum);
intadd(int*a,intflag,intright)
if(flag==right)
returna[flag];
if(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;
max=a[i][0];
n=0;
3;
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日,下午5:
21
*/
stdlib.h>
#defineN4
voidmatrix_mul(int*mul1,int*mul2,int*mul3,intlength);
voidmatrix_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);
intmul1[N*N]={1,2,3,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==0)
voidmatrix_add_sub(int*A,int*B,int*C,intm,charch)
m*m;
if(ch=='
+'
C[i]=A[i]+B[i];
C[i]=A[i]-B[i];
voidupdate_half_value(int*A,int*B,intm)
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,F,G,H,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]);
I=(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],I[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,-2,7},
{-1,7,4,0,7,-5,6},
{0,-1,3,4,12,4,2}
intb[6][7],c[6][7];
intmax;
intflag;
inttemp;
6;
7;
b[i][j]=a[i][j];
c[i][j]=-1;
max=0;
for(k=j-2;
k<
=j+2;
k++)
if(k<
continue;
if(k>
6)
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;
=5;
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];
a[j-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=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);
16.
#defineN100
intsearch(int*a,intleft,intright);
intsum_buf(int*a,intleft,intright);
inta[N];
ints;
N;
a[i]=1;
a[24]=2;
s=search(a,0,N-1);
s);
intsum_buf(int*a,intleft,intright)
for(i=left;
=right;
sum+=a[i];
returnsum;
intsearch(int*a,intleft,intright)
intmid=(left+right)/2;
if(left==right-1)
if(a[left]<
a[right])
returnright;
returnleft;
if(mid*2!
=(right+left-1))
if(sum_buf(a,left,mid-1)>
sum_buf(a,mid+1,right))
returnsearch(a,left,mid-1);
if(sum_buf(a,left,mid-1)<
returnsearch(a,mid+1,right);
returnmid;
if(sum_buf(a,left,mid)>
returnsearch(a,left,mid);
17.
intjob[6][2]={
{3,8},
{12,10},
{5,9},
{2,6},
{9.3},
{11,1}
intx[6],bestx[6],f1=0,bestf,f2[7]={0};
voidtry(inti);
voidswap(inta,intb);
bestf=32767;
x[i]=i;
try(0);
%d"
bestx[i]);
\nbestf=%d\n"
bestf);
voidtry(inti)
intj;
if(i==6)
bestx[j]=x[j];
bestf=f2[i];
f1=f1+job[x[j]][0];
if(f2[i]>
f1)
f2[i+1]=f2[i]+job[x[j]][1];
f2[i+1]=f1+job[x[j]][1];
if(f2[i+1]<
bestf)
swap(i,j);
try(i+1);
swap(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 答案 第四 算法 设计 分析 吕国英