算法设计与分析第三章课后答案吕国英主编.docx
《算法设计与分析第三章课后答案吕国英主编.docx》由会员分享,可在线阅读,更多相关《算法设计与分析第三章课后答案吕国英主编.docx(19页珍藏版)》请在冰豆网上搜索。
算法设计与分析第三章课后答案吕国英主编
2、#include
voidmain()
{
inta[6][6],b[6],i,j;
printf("请输入6个整数:
");
for(i=0;i<6;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<6;i++)
{
a[0][i]=b[i];
}
for(i=1;i<=5;i++)
a[i][0]=b[6-i];
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{
a[i][j]=a[i-1][j-1];
}
for(i=0;i<=5;i++)
{
for(j=0;j<=5;j++)
printf("%d",a[i][j]);
printf("\n");
}
}
3、#include
voidmain()
{
inti,j,count,n;
inta[100][100];
printf("请输入矩阵的阶n=");
scanf("%d",&n);
count=1;
for(i=1;i<=n/2;i++)
{
for(j=i;j<=n-i+1;j++)//上侧
{
a[i][j]=count;
count++;
}
for(j=i+1;j<=n-i;j++)//右侧
{
a[j][n-i+1]=count;
count++;
}
for(j=n-i+1;j>=i+1;j--)//下侧
{
a[n-i+1][j]=count;
count++;
}
for(j=n-i+1;j>=i+1;j--)//左侧
{
a[j][i]=count;
count++;
}
}
if(n%2==1)
{
i=(n+1)/2;
a[i][i]=n*n;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
4、#include
voidmain()
{
inti,j,n,a[100][100],count=1;
printf("请输入方阵的阶n:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{
a[i-j+1][j]=count;
count++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i+1;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
5、#include
voidmain()
{
inti,j,count,n;
inta[100][100];
printf("请输入矩阵的阶n=");
scanf("%d",&n);
count=1;
for(i=1;i<=n/2;i++)
{
for(j=i;j<=n-i+1;j++)//上侧
{
a[i][j]=count;
}
for(j=i+1;j<=n-i;j++)//右侧
{
a[j][n-i+1]=count;
}
for(j=n-i+1;j>=i+1;j--)//下侧
{
a[n-i+1][j]=count;
}
for(j=n-i+1;j>=i+1;j--)//左侧
{
a[j][i]=count;
}
count++;
}
if(n%2==1)
{
i=(n+1)/2;
a[i][i]=i;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
10、狼找兔子问题:
一座山周围有n个洞,顺时针编号为0,1,2.,…,n-1。
一只狼从0号洞开始,顺时针方向计数,每当经过第m个洞时,就进洞找兔子。
输入m,n,问兔子有没有幸免的机会?
如果有,该藏哪里?
#include
voidmain(){
inta[100],b[100],i,n,m,k=0,flag=0;
printf("请输入洞的个数n:
");
scanf("%d",&n);
printf("请输入要经过洞的个数m:
");
scanf("%d",&m);
for(i=0;ia[i]=0;
b[i]=1;
}
for(i=0;;i=(i+m)%n){
if(a[(i+m)%n]==0)
a[(i+m)%n]=1;
else
if(a[(i+m)%n]==1)
break;
}
for(i=0;iif(a[i]==0)
k++;
else
if(a[i]==1)
flag++;
}
if(k>0){
printf("\n兔子有幸免的机会,位置为:
\n");
for(i=0;iif(a[i]==0)
printf("%d",i);
printf("\n");
}
if(flag==n)
printf("兔子没有幸免的机会!
\n");
}
12、有52张牌,使它们全部正面朝上,第一轮是从第2张开始,凡是2的倍数位置上的牌翻成正面朝下;第二轮从第3张牌开始,凡是3的倍数位置上的牌,正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;第三轮从第4张牌开始,凡是4的倍数位置上的牌按上面相同规则翻转,以此类推,知道翻的牌超过104张为止。
统计最后有几张牌正面朝上,以及它们的位置号。
#include
voidmain(){
inta[100],i,sum,k,n=0;
for(i=0;i<100;i++)
a[i]=1;
sum=0;
for(i=2;i<53;i++){
k=1;
while(i*k<53&&sum<=104){
a[i*k]=-a[i*k];
k=k+1;
++sum;
}
}
printf("正面朝上的牌的位置为\n");
for(i=1;i<53;i++)
if(a[i]==1){
n++;
printf("%d",i);
}
printf("\n");
printf("总共%d张牌\n",n);
}
13、A,B,C,D,E5人为某次竞赛的前五名,他们在公布名次前猜名次。
A说:
B得第三名,C得第五名。
B说:
D得第二名,E得第四名。
C说:
B得第一名,E得第四名。
D说:
C得第一名,B得第二名。
A说:
D得第二名,A得第三名。
结果每个人都猜对了一半,实际名次是什么呢?
#include
voidmain(){
inta,b,c,d,e;
for(a=1;a<=5;a++)
for(b=1;b<=5;b++)
if(a!
=b)
for(c=1;c<=5;c++)
if(c!
=a&&c!
=b)
for(d=1;d<=5;d++){
if(d!
=a&&d!
=b&&d!
=c)
e=15-a-b-c-d;
if(e!
=a&&e!
=b&&e!
=c&&e!
=d)
if((b==3)+(c==5)==1&&(d==2)+(e==4)==1&&(b==1)+(e==4)==1&&(c==1)+(b==2)==1&&(d==2)+(a==3)==1)
{
printf("五人的名次分别为:
\n");
printf("A\tB\tC\tD\tE\n");
printf("%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e);
}
}
}
14、#include
voidmain()
{
inti,w1,w2,w3,sql;
for(i=10;i<32;i++)
{
sql=i*i;
w1=sql/100;
w2=sql%100/10;
w3=sql%100%10;
if(w1==w2||w1==w3||w2==w3)
printf("%d*%d=%d\n",i,i,sql);
}
}
15、#include
voidmain()
{
intA,B,C;
for(A=1;A<=3;A++)
for(B=1;B<=3;B++)
{
if(B!
=A)
C=6-A-B;
if(C!
=A&&C!
=B)
if(A!
=1&&C!
=1&&C!
=3)
printf("A<->%d\nB<->%d\nC<->%d\n",A,B,C);
}
printf("1->X2->Y3->Z\n");
}
16、#include
voidmain()
{
intnumber;
printf("请输入一个整数\nnumber=");
scanf("%d",&number);
if(number%4==0)
printf("%d能被4整除\n",number);
if(number%7==0)
printf("%d能被7整除\n",number);
if(number%9==0)
printf("%d能被9整除\n",number);
else
printf("不能被4,7,9任一个整除\n");
}
17、#include
voidmain()
{
inta,b,c,d;
printf("Pleasethinkofanumberbetween1and100\n");
printf("yournumberdividedby3hasaremainderof\n");
printf("PleaseInputa=");
scanf("%d",&a);
printf("yournumberdividedby4hasaremainderof\n");
printf("PleaseInputb=");
scanf("%d",&b);
printf("yournumberdividedby7hasaremainderof\n");
printf("PleaseInputc=");
scanf("%d",&c);
printf("letmethinkamoment...\n");
d=28*a+21*b+36*c;
while(d>84)
d=d-84;
printf("你的数字是%d\n",d);
}
18、#include
voidmain()
{
inta,b,c,d,e,f,g,h,i,sum1,sum2;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
if(a!
=b)
for(c=1;c<=9;c++)
if(c!
=a&&c!
=b)
for(d=1;d<=9;d++)
if(d!
=a&&d!
=b&&d!
=c)
for(e=1;e<=9;e++)
if(e!
=a&&e!
=b&&e!
=c&&e!
=d)
for(f=1;f<=9;f++)
if(f!
=a&&f!
=b&&f!
=c&&f!
=d&&f!
=e)
for(g=1;g<=9;g++)
if(g!
=a&&g!
=b&&g!
=c&&g!
=d&&g!
=e&&g!
=f)
for(h=1;h<=9;h++)
if(h!
=a&&h!
=b&&h!
=c&&h!
=d&&h!
=e&&h!
=f&&h!
=g)
for(i=1;i<=9;i++)
if(i!
=a&&i!
=b&&i!
=c&&i!
=d&&i!
=e&&i!
=f&&i!
=g&&i!
=h)
{
sum1=a*10000+b*1000+c*100+d*10+e;
sum2=f*1000+g*100+h*10+i;
if(sum1==2*sum2)
printf("五位数为:
%d四位数为:
%d\n",sum1,sum2);
}
}
19、#include
#include
voidmain()
{
charstr[100];
intsum=0,i,n=0;
printf("请输入十六进制数:
");
gets(str);
n=strlen(str);
for(i=0;i{
if(str[i]=='A'|str[i]=='B'|
str[i]=='C'|str[i]=='D'|
str[i]=='E'|str[i]=='F')
str[i]=str[i]-55;
if(str[i]=='a'|str[i]=='b'|
str[i]=='c'|str[i]=='d'|
str[i]=='e'|str[i]=='f')
str[i]=str[i]-87;
if(str[i]=='1'|str[i]=='2'|
str[i]=='3'|str[i]=='4'|
str[i]=='5'|str[i]=='6'|
str[i]=='7'|str[i]=='8'|
str[i]=='9'|str[i]=='0')
str[i]=str[i]-48;
}
for(i=0;isum=(sum+str[i])*16;
sum=sum+str[i];
printf("十进制数为:
%d\n",sum);
}
20、#include
voidmain()
{
inta,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
if(a!
=b)
for(c=1;c<=9;c++)
if(c!
=a&&c!
=b)
for(d=1;d<=9;d++)
if(d!
=a&&d!
=b&&d!
=c)
for(e=1;e<=9;e++)
if(e!
=a&&e!
=b&&e!
=c&&e!
=d)
for(f=1;f<=9;f++)
if(f!
=a&&f!
=b&&f!
=c&&f!
=d&&f!
=e)
for(g=1;g<=9;g++)
if(g!
=a&&g!
=b&&g!
=c&&g!
=d&&g!
=e&&g!
=f)
for(h=1;h<=9;h++)
if(h!
=a&&h!
=b&&h!
=c&&h!
=d&&h!
=e&&h!
=f&&h!
=g)
for(i=1;i<=9;i++)
if(i!
=a&&i!
=b&&i!
=c&&i!
=d&&i!
=e&&i!
=f&&i!
=g&&i!
=h)
{
if((a*10+b)*(c*100+d*10+e)==(f*1000+g*100+h*10+i))
printf("a=%db=%dc=%dd=%de=%df=%dg=%dh=%di=%d\n",a,b,c,d,e,f,g,h,i);
}
}
21、#include
#include
voidmain()
{
inta,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
if(a!
=b)
for(c=1;c<=9;c++)
if(c!
=a&&c!
=b)
for(d=1;d<=9;d++)
if(d!
=a&&d!
=b&&d!
=c)
for(e=1;e<=9;e++)
if(e!
=a&&e!
=b&&e!
=c&&e!
=d)
for(f=1;f<=9;f++)
if(f!
=a&&f!
=b&&f!
=c&&f!
=d&&f!
=e)
for(g=1;g<=9;g++)
if(g!
=a&&g!
=b&&g!
=c&&g!
=d&&g!
=e&&g!
=f)
for(h=1;h<=9;h++)
if(h!
=a&&h!
=b&&h!
=c&&h!
=d&&h!
=e&&h!
=f&&h!
=g)
for(i=1;i<=9;i++)
if(i!
=a&&i!
=b&&i!
=c&&i!
=d&&i!
=e&&i!
=f&&i!
=g&&i!
=h)
if(sqrt(a*100000+b*10000+c*1000+d*100+e*10+f)==(g*100+h*10+i))
printf("%d\n",a*100000+b*10000+c*1000+d*100+e*10+f);
}
23、#include
voidmain()
{
intnumber,w1,w2,w3,w4,w5;
printf("请输入一个五位以内的正整数:
");
scanf("%d",&number);
if(number/10==0)
{
printf("它是一个一位数!
\n");
printf("%d\n",number);
printf("正序逆序相同!
\n");
}
else
if(number/100==0)
{
printf("它是一个两位数!
\n");
printf("正序为:
%d%d\n",number/10,number%10);
printf("逆序为:
%d%d\n",number%10,number/10);
}
else
if(number/1000==0)
{
printf("它是一个三位数!
\n");
w1=number/100;
w2=number%100/10;
w3=number%10;
printf("正序为:
%d%d%d\n",w1,w2,w3);
printf("逆序为:
%d%d%d\n",w3,w2,w1);
}
else
if(number/10000==0)
{
printf("它是一个四位数!
\n");
w1=number/1000;
w2=number%1000/100;
w3=number%100/10;
w4=number%100%10;
printf("正序为:
%d%d%d%d\n",w1,w2,w3,w4);
printf("逆序为:
%d%d%d%d\n",w4,w3,w2,w1);
}
else
if(number/100000==0)
{
printf("它是一个五位数!
\n");
w1=number/10000;
w2=number%10000/1000;
w3=number%1000/100;
w4=number%1000%100/10;
w5=number%1000%100%10;
printf("正序为:
%d%d%d%d%d\n",w1,w2,w3,w4,w5);
printf("逆序为:
%d%d%d%d%d\n",w5,w4,w3,w2,w1);
}
else
printf("error!
");
}
27、#include
voidmain()
{
intmonth;
printf("请输入月份month=");
scanf("%d",&month);
switch(month)
{
case1:
printf("January\n");break;
case2:
printf("February\n");break;
case3:
printf("March\n");break;
case4:
printf("April\n");break;
case5:
printf("May\n");break;
case6:
printf("June\n");break;
case7:
printf("July\n");break;
case8:
printf("August\n");break;
case9:
printf("September\n");break;
case10:
printf("October\n");break;
case11:
printf("November\