算法设计与分析 第二版 吕国英 第四章课后习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)
}
if(N==2)
return n1>n2?basic+1:basic+2;
else
if(n1==n2)
return n3;
else
if(n1>n2)
r百度文库turn fun(N/2,basic,array);
else
return fun(N/2,basic+N/2,array);
}
void main()
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
if(n%3==2)
if(n%5==4)
if(n%6==5)
flag=0;
printf("该数为%d\n",n-7);
}
4.8
#include<stdio.h>
void main()
{
int th,flag=0;
for(th=1000;th<9999;th++)
if(th/1000!=th/100%10)
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)
}
4.16
#include<stdio.h>
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<N/2;i++)
{
n1+=array[basic+i+1];
n2+=array[basic+N/2+i+1];
}
4.3
#include<stdio.h>
void main()
{
int flag=0,last=54,card;
printf("共有牌:%d张\n",last);
printf("计算机出:3 ");
last=last-3;
while(last>1)
{
printf("还有牌:%d张",last);
printf("您出:");
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)
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<stdio.h>
{
if(i==max1||i==min1)
continue;
if(a[max2]<a[i])
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]);
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(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)
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++)
int i,max1=0,max2=0,min1=0,min2=0;
for(i=0;i<10;i++)
{
if(a[max1]<a[i])
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++)
{
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));
}
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((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((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((big*3+middle*2+small/2)==goods)
printf("大马:%2d中马:%2d小马:%2d\n",big,middle,small);
}
4.7
#include<stdio.h>
void main()
{
int n,flag=1;
for(n=7;flag;n=n+7)
if(n%2==1)
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);
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)
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)
#include<stdio.h>
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;
//先判断不在同一行和同一列,然后再做不在对角线
{
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 <stdio.h>
main()
{
int a[10]={1,10,5,4,9,3,8,6,7,2};
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;
}
else
printf("2+22+…+2222(n个2)(不考虑精度)=%d\n",sum);
}
4.2
#include<stdio.h>
void main()
{
int i,total=2,day=10;
for(i=day-1;i>=1;i--)
total=(total+2)*2;
printf("第一天共有%d个桃。\n",total);
4.1#include<stdio.h>
#include<math.h>
void main()
{
int i,n,sum=0,power,proce,remainder,interger,decimal;
printf("请输入2+22+…+2222(n个2)(不考虑精度)的n\nn=");
scanf("%d",&n);
{
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;
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(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)
}
if(N==2)
return n1>n2?basic+1:basic+2;
else
if(n1==n2)
return n3;
else
if(n1>n2)
r百度文库turn fun(N/2,basic,array);
else
return fun(N/2,basic+N/2,array);
}
void main()
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
if(n%3==2)
if(n%5==4)
if(n%6==5)
flag=0;
printf("该数为%d\n",n-7);
}
4.8
#include<stdio.h>
void main()
{
int th,flag=0;
for(th=1000;th<9999;th++)
if(th/1000!=th/100%10)
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)
}
4.16
#include<stdio.h>
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<N/2;i++)
{
n1+=array[basic+i+1];
n2+=array[basic+N/2+i+1];
}
4.3
#include<stdio.h>
void main()
{
int flag=0,last=54,card;
printf("共有牌:%d张\n",last);
printf("计算机出:3 ");
last=last-3;
while(last>1)
{
printf("还有牌:%d张",last);
printf("您出:");
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)
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<stdio.h>
{
if(i==max1||i==min1)
continue;
if(a[max2]<a[i])
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]);
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(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)
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++)
int i,max1=0,max2=0,min1=0,min2=0;
for(i=0;i<10;i++)
{
if(a[max1]<a[i])
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++)
{
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));
}
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((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((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((big*3+middle*2+small/2)==goods)
printf("大马:%2d中马:%2d小马:%2d\n",big,middle,small);
}
4.7
#include<stdio.h>
void main()
{
int n,flag=1;
for(n=7;flag;n=n+7)
if(n%2==1)
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);
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)
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)
#include<stdio.h>
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;
//先判断不在同一行和同一列,然后再做不在对角线
{
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 <stdio.h>
main()
{
int a[10]={1,10,5,4,9,3,8,6,7,2};
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;
}
else
printf("2+22+…+2222(n个2)(不考虑精度)=%d\n",sum);
}
4.2
#include<stdio.h>
void main()
{
int i,total=2,day=10;
for(i=day-1;i>=1;i--)
total=(total+2)*2;
printf("第一天共有%d个桃。\n",total);
4.1#include<stdio.h>
#include<math.h>
void main()
{
int i,n,sum=0,power,proce,remainder,interger,decimal;
printf("请输入2+22+…+2222(n个2)(不考虑精度)的n\nn=");
scanf("%d",&n);
{
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;
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)