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