文档库

最新最全的文档下载
当前位置:文档库 > 算法设计与分析 第二版 吕国英 第四章课后习题答案

算法设计与分析 第二版 吕国英 第四章课后习题答案

4.1#include

#include

void main()

{

int i,n,sum=0,power,proce,remainder,interger,decimal;

printf("请输入2+22+…+2222(n个2)(不考虑精度)的n\nn=");

scanf("%d",&n);

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

{

proce=(int)(pow(10,i)-1)/9*2;

sum=sum+proce;

}

if(n>9)

{

for(i=1,power=n-9;i<=power;i++)

{

proce=(int)(pow(10,9)-1)/9*2;

sum=sum/10+proce;

remainder=sum%10;

if(remainder>=5)

sum++;

}

interger=sum/100000000;

decimal=sum%100000000;

printf("2+22+…+2222(n个2)(不考虑精度)=%d.%d*e+%d\n",interger,decimal,n-1);

}

else

printf("2+22+…+2222(n个2)(不考虑精度)=%d\n",sum);

}

4.2

#include

void main()

{

int i,total=2,day=10;

for(i=day-1;i>=1;i--)

total=(total+2)*2;

printf("第一天共有%d个桃。\n",total);

}

4.3

#include

void main()

{

int flag=0,last=54,card;

printf("共有牌:%d 张\n",last);

printf("计算机出:3 ");

last=last-3;

while(last>1)

{

printf("还有牌:%d 张",last);

printf("您出:");

scanf("%d",&card);

printf("计算机出:%d ",5-card);

last=last-5;

}

printf("\n还有牌:%d 张。您只能输入1。\n",last);

printf("您出:");

scanf("%d",&card);

printf("Sorry!您输了……\n");

}

4.5

#include

void main()

{

int

array[8][8],i,j,i1=0,i2=1,i3=2,i4=3,i5=4,i6=5,i7=6,i8=7,j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0;

//先判断不在同一行和同一列,然后再做不在对角线

printf("此处预先规定,第一行第一列处是皇后。\n");

for(j2=1;j2<8;j2++)

for(j3=1;j3<8;j3++)

for(j4=1;j4<8;j4++)

for(j5=1;j5<8;j5++)

for(j6=1;j6<8;j6++)

for(j7=1;j7<8;j7++)

for(j8=1;j8<8;j8++)

if(j3!=j2)

if(j4!=j2&&j4!=j3)

if(j5!=j2&&j5!=j3&&j5!=j4)

if(j6!=j2&&j6!=j3&&j6!=j4&&j6!=j5) if(j7!=j2&&j7!=j3&&j7!=j4&&j7!=j5&&j7!=j6)

if(j8!=j2&&j8!=j3&&j8!=j4&&j8!=j5&&j8!=j6&&j8!=j7)

if((i2-i1+j2-j1)!=0&&(i2-i1-j2+j1)!=0)//两点的位置关系!

if((i3-i1+j3-j1)!=0&&(i3-i1-j3+j1)!=0)

if((i3-i2+j3-j2)!=0&&(i3-i2-j3+j2)!=0)

if((i4-i1+j4-j1)!=0&&(i4-i1-j4+j1)!=0)

if((i4-i2+j4-j2)!=0&&(i4-i2-j4+j2)!=0) if((i4-i3+j4-j3)!=0&&(i4-i3-j4+j3)!=0)

if((i5-i1+j5-j1)!=0&&(i5-i1-j5+j1)!=0)

if((i5-i2+j5-j2)!=0&&(i5-i2-j5+j2)!=0)

if((i5-i3+j5-j3)!=0&&(i5-i3-j5+j3)!=0)

if((i5-i4+j5-j4)!=0&&(i5-i4-j5+j4)!=0)

if((i6-i1+j6-j1)!=0&&(i6-i1-j6+j1)!=0)

if((i6-i2+j6-j2)!=0&&(i6-i2-j6+j2)!=0)

if((i6-i3+j6-j3)!=0&&(i6-i3-j6+j3)!=0)

if((i6-i4+j6-j4)!=0&&(i6-i4-j6+j4)!=0)

if((i6-i5+j6-j5)!=0&&(i6-i5-j6+j5)!=0)

if((i7-i1+j7-j1)!=0&&(i7-i1-j7+j1)!=0)

if((i7-i2+j7-j2)!=0&&(i7-i2-j7+j2)!=0)

if((i7-i3+j7-j3)!=0&&(i7-i3-j7+j3)!=0) if((i7-i4+j7-j4)!=0&&(i7-i4-j7+j4)!=0)

if((i7-i5+j7-j5)!=0&&(i7-i5-j7+j5)!=0)

if((i7-i6+j7-j6)!=0&&(i7-i6-j7+j6)!=0)

if((i8-i1+j8-j1)!=0&&(i8-i1-j8+j1)!=0)

if((i8-i2+j8-j2)!=0&&(i8-i2-j8+j2)!=0)

if((i8-i3+j8-j3)!=0&&(i8-i3-j8+j3)!=0)

if((i8-i4+j8-j4)!=0&&(i8-i4-j8+j4)!=0)

if((i8-i5+j8-j5)!=0&&(i8-i5-j8+j5)!=0)

if((i8-i6+j8-j6)!=0&&(i8-i6-j8+j6)!=0)

if((i8-i7+j8-j7)!=0&&(i8-i7-j8+j7)!=0)

{

printf("**\n");

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

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

array[i][j]=0;

array[i1][j1]=1;

array[i2][j2]=1;

array[i3][j3]=1;

array[i4][j4]=1;

array[i5][j5]=1;

array[i6][j6]=1;

array[i7][j7]=1;

array[i8][j8]=1;

printf("1是皇后所在位置,0为其它位置。\n"); for(i=0;i<8;i++)

{

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

printf("%d ",array[i][j]);

printf("\n");

}

}

}

4.6

#include

void main()

{

int goods=100,big=0,middle=0,small=0;

for(big=0;big<=33;big++)

for(middle=0;middle<=50;middle++)

for(small=0;small<=100;small=small+2)

if((big+middle+small)==100)

if((big*3+middle*2+small/2)==goods)

printf("大马:%2d 中马:%2d 小马:%2d\n",big,middle,small); }

4.7

#include

void main()

{

int n,flag=1;

for(n=7;flag;n=n+7)

if(n%2==1)

if(n%3==2)

if(n%5==4)

if(n%6==5)

flag=0;

printf("该数为%d\n",n-7);

}

4.8

#include

void main()

{

int th,flag=0;

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

if(th/1000!=th/100%10)

if(th/1000!=th/10%10)

if(th/1000!=th%10)

if(th/100%10!=th/10%10)

if(th/100%10!=th%10)

if(th/10%10!=th%10)

if(th%((th/1000)*(th/1000))==0)

{

flag=0;

if((th/100%10)==0)

flag=1;

else

if(th%((th/100%10)*(th/100%10))==0)

flag=1;

if(flag==1)

{

flag=0;

if((th/10%10)==0)

flag=1;

else

if(th%((th/10%10)*(th/10%10))==0)

flag=1;

if(flag==1)

{

flag=0;

if(th%10==0)

flag=1;

else

if(th%((th%10)*(th%10))==0)

flag=1;

if(flag==1)

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

}

}

}

}

4.9

#include

main()

{

int a[10]={1,10,5,4,9,3,8,6,7,2};

int i,max1=0,max2=0,min1=0,min2=0;

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

{

if(a[max1]

max1=i;

if(a[min1]>a[i])

min1=i;

}

if(max1==0)

max2=1;

if(min1==0)

min2=1;

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

{

if(i==max1||i==min1)

continue;

if(a[max2]

max2=i;

if(a[min2]>a[i])

min2=i;

}

printf("max1=%d\nmax2=%d\nmin1=%d\nmin2=%d\n",a[max1],a[max2],a[min1],a[min2]); }

4.16

#include

int fun(int N,int basic,int array[])

{

int n1=0,n2=0,n3=0,i;

n3=(N%2!=0)?N+basic:0;

for(i=0;i

{

n1+=array[basic+i+1];

n2+=array[basic+N/2+i+1];

}

if(N==2)

return n1>n2?basic+1:basic+2;

else

if(n1==n2)

return n3;

else

if(n1>n2)

return fun(N/2,basic,array);

else

return fun(N/2,basic+N/2,array); }

void main()

{

int arr[19]={0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1};

printf("不合格品为第%d块。\n",fun(18,0,arr)); }