算法设计与分析 吕国英 习题答案第四章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析(第二版)主编:吕国英
习题答案
第四章
1.
#include
int main(void)
{
int buf[100];
int n;
int i,j,k;
scanf("%d",&n);
for(i=0;i buf[i]=2; for(i=0;i { for(j=0;j { buf[j]+=2; } } for(j=0;j { if(buf[j]>=10) { buf[j+1]+=buf[j]/10; buf[j]=buf[j]%10; } } for(i=n-1;i>=0;i--) printf("%d",buf[i]); printf("\n"); return 0; } 2. #include int main(void) { int n=2; int i; for(i=1;i<=9;i++) { n=(n+2)*2; } printf("%d\n",n); return 0; } 3. #include int main(void) { int a=54; int n; int m; printf("计算机先拿3张牌\n"); a=a-3; while(a>=0) { printf("还剩%d张牌\n",a); printf("你拿几张?请输入:"); scanf("%d",&n); if(n>4||n<1||n>a) { printf("错误!重新拿牌\n"); continue; } a=a-n; printf("还剩%d张牌\n",a); if(a==0) break; m=5-n; printf("计算机拿%d\n",m); a=a-m; } return 0; } 4. #include int d; int a1,a2; int fun(int n); int main(void) { int n; printf("n=?,d=?,a1=?,a2=?"); scanf("%d%d%d%d\n",&n,&d,&a1,&a2); printf("%d\n",fun(n)); return 0; } int fun(int n) { if(n==1) return a1; if(n==2) return a2; return fun(n-2)-(fun(n-1)-d)*2; } 5. #include char chess[8][8]; int is_safe(int row,int col); int queen(int row,int col,int n); int main(void) { int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) chess[i][j]='X'; queen(0,0,0); for(i=0;i<8;i++) { for(j=0;j<8;j++) printf("%c ",chess[i][j]); printf("\n"); } return 0; } int is_safe(int row,int col) { int i,j; for(i=0;i<8;i++) { if(chess[row][i]=='Q') return 0; if(chess[i][col]=='Q') return 0; } i=row; j=col; while(i!=-1&&j!=-1) { if(chess[i--][j--]=='Q') return 0; } i=row; j=col; while(i!=-1&&j!=8) { if(chess[i--][j++]=='Q') return 0; } i=row; j=col; while(i!=8&&j!=-1) { if(chess[i++][j--]=='Q') return 0; } i=row; j=col; while(i!=8&&j!=8) { if(chess[i++][j++]=='Q') return 0; } return 1; } int queen(int row,int col,int n) { int i,j; int result=0; if(n==8) return 1; else if(is_safe(row,col)) { chess[row][col]='Q'; for(i=0;i<8;i++) for(j=0;j<8;j++) {