算法设计与分析第三章课后答案吕国英主编.

合集下载

习题答案第四章-算法设计与分析-吕国英

习题答案第四章-算法设计与分析-吕国英

习题答案第四章-算法设计与分析-吕国英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<stdio.h>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;elseif(is_safe(row,col)){chess[row][col]='Q';for(i=0;i<8;i++)for(j=0;j<8;j++){result+=queen(i,j,n+1);if(result>0)break;}if(result>0)return 1;else{chess[row][col]='X';return 0;}}elsereturn 0;}6.#include<stdio.h>int main(void){int i,j,k;for(i=1;i<=33;i++)for(j=1;j<=50;j++){k=100-i-j;if(k%2==0){if(3*i+2*j+k/2==100)printf("大马%d\n中马%d\n小马%d\n\n\n",i,j,k); }}return 0;}7.#include<stdio.h>int main(void){int i;for(i=1;i<=10000;i++){if(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0) printf("%d\n",i);}return 0;}8.#include<stdio.h>int main(void){int i;int sum;int a1,a2,a3,a4;for(i=1000;i<=9999;i++){a1=i%10;a2=i/10%10;if(a1!=a2){a3=i/100%10;if(a1!=a3&&a2!=a3){a4=i/1000;if(a1!=a4&&a2!=a4&&a3!=a4){sum=(a1+a2+a3+a4)*(a1+a2+a3+a4);if(i%sum==0)printf("%d\n",i);}}}}return 0;}9.#include<stdio.h>#define N 10void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2); int main(void){int a[N]={2,3,4,5,34,7,9,6,43,21};int min1,min2;int max1,max2;max_min(a,0,N-1,&min1,&min2,&max1,&max2);printf("min1=%d\nmin2=%d\nmax1=%d\nmax2=%d\n",min1,min2,max1,max2);return 0;}void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2) {int lmin1,lmin2,lmax1,lmax2;int rmin1,rmin2,rmax1,rmax2;int mid;if(m==n){*min1=*min2=*max1=*max2=a[m];}elseif(m==n-1){if(a[m]<a[n]){*min1=a[m];*min2=a[n];*max1=a[n];*max2=a[m];}else{*min1=a[n];*min2=a[m];*max1=a[m];*max2=a[n];}}else{mid=(m+n)/2;max_min(a,m,mid,&lmin1,&lmin2,&lmax1,&lmax2); max_min(a,mid+1,n,&rmin1,&rmin2,&rmax1,&rmax2); if(lmin1<rmin1){if(lmin2<rmin1){*min1=lmin1;*min2=lmin2;}else{*min1=lmin1;*min2=rmin1;}}elseif(rmin2<lmin1){*min1=rmin1;*min2=rmin2;}else{*min1=rmin1;*min2=lmin1;}if(lmax1>rmax1){if(lmax2>rmax1){*max1=lmax1;*max2=lmax2;}else{*max1=lmax1;*max2=rmax1;}}elseif(rmax2>lmax1){*max1=rmax1;*max2=rmax2;}else{*max1=rmax1;*max2=lmax1;}}}10.#include<stdio.h>int add(int *a,int flag,int right); int main(void){int a[10]={1,2,3,4,5,6,7,8,9,10}; int sum=add(a,0,9);printf("%d\n",sum);return 0;int add(int *a,int flag,int right){int mid;if(flag==right){return a[flag];}elseif(flag==right-1){return a[flag]+a[right];}else{mid=(flag+right)/2;return add(a,flag,mid)+add(a,mid+1,right); }}11.#include<stdio.h>int main(void){int a[5][3]={{-50,17,-42},{-47,-19,-3},{36,-34,-43},{-30,-43,34},{-23,-8,-45}};int i,j;int max,n;int sum=0;for(i=0;i<5;i++){max=a[i][0];n=0;for(j=1;j<3;j++){if(a[i][j]>max){max=a[i][j];n=j;}sum+=max;printf("a[%d][%d]=%d\n",i,n,max);}printf("%d\n",sum);return 0;}12./** File: newmain.c* Author: nirnava** Created on 2010年4月22日, 下午5:21*/#include<stdio.h>#include<stdlib.h>#define N 4void matrix_mul(int *mul1,int *mul2,int *mul3,int length); void matrix_add_sub(int * A,int * B,int * C,int m,char ch); void update_half_value(int * A,int * B,int m);void get_half_value(int * A,int * B,int m);int main(void){int i,j;int mul1[N*N]={1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6};int mul2[N*N]={7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2};int mul3[N*N];matrix_mul(mul1,mul2,mul3,N);for(i=0;i<N*N;i++){printf("%5d",mul3[i]);if((i+1)%N==0)printf("\n");}return 0;}void matrix_add_sub(int * A,int * B,int * C,int m,char ch) {int i;for(i=0;i<m*m;i++){if(ch=='+')C[i]=A[i]+B[i];C[i]=A[i]-B[i];}}void update_half_value(int * A,int * B,int m) {int i,j;for(i=0;i<m/2;i++){for(j=0;j<m/2;j++){B[i*m+j]=A[i*m/2+j];}}}void get_half_value(int * A,int * B,int m) {int i,j;for(i=0;i<m/2;i++){for(j=0;j<m/2;j++){A[i*m/2+j]=B[i*m+j];}}}void matrix_mul(int *A,int *B,int *C,int m) {if(m==2){int D,E,F,G,H,I,J;D=A[0]*(B[1]-B[3]);E=A[3]*(B[2]-B[0]);F=(A[2]+A[3])*B[0];G=(A[0]+A[1])*B[3];H=(A[2]-A[0])*(B[0]+B[1]);I=(A[1]-A[3])*(B[2]+B[3]);J=(A[0]+A[3])*(B[0]+B[3]);C[0]=E+I+J-G;C[1]=D+G;C[2]=E+F;C[3]=D+H+J-F;return ;}{int A1[m*m/4],A2[m*m/4],A3[m*m/4],A4[m*m/4];int B1[m*m/4],B2[m*m/4],B3[m*m/4],B4[m*m/4];int C1[m*m/4],C2[m*m/4],C3[m*m/4],C4[m*m/4];int D[m*m/4],E[m*m/4],F[m*m/4],G[m*m/4],H[m*m/4],I[m*m/4],J[m*m/4]; int temp1[m*m/4],temp2[m*m/4];get_half_value(A1,&A[0],m);get_half_value(A2,&A[m/2],m);get_half_value(A3,&A[m*m/2],m);get_half_value(A4,&A[m*m/2+m/2],m);get_half_value(B1,&B[0],m);get_half_value(B2,&B[m/2],m);get_half_value(B3,&B[m*m/2],m);get_half_value(B4,&B[m*m/2+m/2],m);matrix_add_sub(B2,B4,temp1,m/2,'-');matrix_mul(A1,temp1,D,m/2);matrix_add_sub(B3,B1,temp1,m/2,'-');matrix_mul(A4,temp1,E,m/2);matrix_add_sub(A3,A4,temp1,m/2,'+');matrix_mul(temp1,B1,F,m/2);matrix_add_sub(A1,A2,temp1,m/2,'+');matrix_mul(temp1,B4,G,m/2);matrix_add_sub(A3,A1,temp1,m/2,'-');matrix_add_sub(B1,B2,temp2,m/2,'+');matrix_mul(temp1,temp2,H,m/2);matrix_add_sub(A2,A4,temp1,m/2,'-');matrix_add_sub(B3,B4,temp2,m/2,'+');matrix_mul(temp1,temp2,I,m/2);matrix_add_sub(A1,A4,temp1,m/2,'+');matrix_add_sub(B1,B4,temp2,m/2,'+');matrix_mul(temp1,temp2,J,m/2);matrix_add_sub(E,I,temp1,m/2,'+');matrix_add_sub(J,G,temp2,m/2,'-');matrix_add_sub(temp1,temp2,C1,m/2,'+');matrix_add_sub(D,G,C2,m/2,'+');matrix_add_sub(E,F,C3,m/2,'+');matrix_add_sub(D,H,temp1,m/2,'+');matrix_add_sub(J,F,temp2,m/2,'-');matrix_add_sub(temp1,temp2,C4,m/2,'+');update_half_value(C1,&C[0],m);update_half_value(C2,&C[m/2],m);update_half_value(C3,&C[m*m/2],m);update_half_value(C4,&C[m*m/2+m/2],m);return ;}}13.#include<stdio.h>int main(void){int a[6][7]={{16,4,3,12,6,0,3},{4,-5,6,7,0,0,2},{6,0,-1,-2,3,6,8},{5,3,4,0,0,-2,7},{-1,7,4,0,7,-5,6},{0,-1,3,4,12,4,2}};int b[6][7],c[6][7];int i,j,k;int max;int flag;int temp;for(i=0;i<6;i++)for(j=0;j<7;j++){b[i][j]=a[i][j];c[i][j]=-1;}for(i=1;i<5;i++){for(j=0;j<7;j++){max=0;for(k=j-2;k<=j+2;k++) {if(k<0)continue;elseif(k>6)break;else{if(b[i][j]+b[i-1][k]>max) {max=b[i][j]+b[i-1][k]; flag=k;}}}b[i][j]=max;c[i][j]=flag;}}for(j=1;j<=5;j++){max=0;for(k=j-2;k<=j+2;k++) {if(k<0)continue;elseif(k>6)break;else{if(b[i][j]+b[i-1][k]>max) {max=b[i][j]+b[i-1][k]; flag=k;}}}b[i][j]=max;c[i][j]=flag;}max=0;for(j=1;j<=5;j++){if(b[i][j]>max){max=b[i][j];flag=j;}}printf("%d\n",max);temp=c[i][flag];printf("%5d",a[i][temp]); for(j=i;j>0;j--){temp=c[j][temp];printf("%5d",a[j-1][temp]); }printf("\n");return 0;}14.#include<stdio.h>int main(void){int A[6]={0,3,7,9,12,13}; int B[6]={0,5,10,11,11,11}; int C[6]={0,4,6,11,12,12}; int AB[6][6];int temp[6];int abc[6];int max;int flag;int i,j,k;for(i=0;i<=5;i++){max=0;for(j=0;j<=i;j++){AB[i][j]=A[i-j]+B[j];if(AB[i][j]>max)max=AB[i][j];}temp[i]=max;}max=0;for(i=0;i<=5;i++){abc[i]=temp[i]+C[5-i];if(abc[i]>max){max=abc[i];flag=i;}}printf("max=%d\n",max); printf("c=%d\n",5-flag); max=max-C[5-flag];for(i=0;i<=flag;i++){if(AB[flag][i]==max){printf("b=%d\n",i);printf("a=%d\n",flag-i);break;}}return 0;}16.#include<stdio.h>#define N 100int search(int *a,int left,int right); int sum_buf(int *a,int left,int right); int main(void){int a[N];int i;int s;for(i=0;i<N;i++)a[i]=1;a[24]=2;s=search(a,0,N-1);printf("%d\n",s);return 0;}int sum_buf(int *a,int left,int right) {int i;int sum=0;for(i=left;i<=right;i++)sum+=a[i];return sum;}int search(int *a,int left,int right) {int mid=(left+right)/2;if(left==right-1){if(a[left]<a[right])return right;elsereturn left;}if(mid*2!=(right+left-1)){if(sum_buf(a,left,mid-1)>sum_buf(a,mid+1,right)) {return search(a,left,mid-1);}elseif(sum_buf(a,left,mid-1)<sum_buf(a,mid+1,right)) {return search(a,mid+1,right);}elsereturn mid;}else{if(sum_buf(a,left,mid)>sum_buf(a,mid+1,right)) return search(a,left,mid);elsereturn search(a,mid+1,right);}}17.#include<stdio.h>int job[6][2]={{3,8},{12,10},{5,9},{2,6},{9.3},{11,1}};int x[6],bestx[6],f1=0,bestf,f2[7]={0};void try(int i);void swap(int a,int b);int main(void){int i,j;bestf=32767;for(i=0;i<6;i++)x[i]=i;try(0);for(i=0;i<6;i++)printf("%d ",bestx[i]);printf("\nbestf=%d\n",bestf); return 0;}void try(int i){int j;if(i==6){for(j=0;j<6;j++)bestx[j]=x[j];bestf=f2[i];}else{for(j=i;j<6;j++){f1=f1+job[x[j]][0];if(f2[i]>f1)f2[i+1]=f2[i]+job[x[j]][1]; elsef2[i+1]=f1+job[x[j]][1];if(f2[i+1]<bestf){swap(i,j);try(i+1);swap(i,j);}f1=f1-job[x[j]][0];}}}void swap(int i,int j){int temp;temp=x[i];x[i]=x[j];x[j]=temp;}18.#include<stdio.h>#define N 5 //N个数字#define M 2 //M个加号char buf[N];int a[N];char b[M+1][N];int c[M+1];int try(int t);void swap(int t1,int t2); int add();void output();int min=99999;int main(){int i;for(i=0;i<N;i++){scanf("%c",&buf[i]);}a[0]=0;for(i=1;i<=M;i++){a[i]=1;}for(;i<N;i++){a[i]=0;}try(1);output();printf("%d\n",min);return 0;}int try(int t){int j;int i;int sum;if(t>=N){sum=add();if(sum<min){min=sum;for(i=0;i<M+1;i++){c[i]=atoi(b[i]);}}/*for(i=0;i<N;i++){printf("%d",a[i]);}printf("\n");*/}else{for(j=t;j<N;j++){//if(a[t]!=a[j]){swap(t,j);try(t+1);swap(t,j);}//else//try(t+1);}}}void swap(int t1,int t2) {int t;t=a[t1];a[t1]=a[t2];a[t2]=t;}int add(){int sum=0;int i=0;int j;int k=0;int h=0;for(i=0;i<M+1;i++)for(j=0;j<N;j++)b[i][j]='Q';i=0;j=0;h=0;k=0;for(j=0;j<N;j++){if(a[j]==1){h=0;i++;b[i][h]=buf[j];//printf("%d ",atoi(b[i]));//printf("%d %d %c \n",i,h,b[i][h]); h++;}else{b[i][h]=buf[j];//printf("%d %d %c \n",i,h,b[i][h]); //printf("%d ",atoi(b[i]));h++;}}/*for(i=0;i<M+1;i++){for(j=0;j<N;j++)printf("%c ",b[i][j]);printf("\n");}*/for(i=0;i<M+1;i++){sum+=atoi(b[i]);}return sum;}void output(){int i;for(i=0;i<M+1;i++){printf("%d",atoi(b[i]));if(i!=M)printf("+");}printf("=");}19.#include<stdio.h>int main(void){int buf[100];int m,n;int i,j;buf[0]=1;buf[1]=1;scanf("%d%d",&n,&m);for(i=1;i<n;i++){buf[i+1]=buf[i];for(j=i;j>0;j--){buf[j]=buf[j]+buf[j-1];}}printf("%d\n",buf[m]);return 0;}20.#include<stdio.h>int max_sum4(int *a,int n);int max_sub_sum(int *a,int left,int right);int main(void){int a[6]={-2,11,-4,13,-5,-2};printf("%d\n",max_sum4(a,5));return 0;}int max_sum4(int *a,int n){return max_sub_sum(a,0,n);}int max_sub_sum(int *a,int left,int right){int center,i,max,left_sum,right_sum,s1,s2,s3,s4,lefts,rights,leftl,rightl; int buf[4];if(left==right)return a[left];else{center=(left+right)/2;left_sum=max_sub_sum(a,left,center); right_sum=max_sub_sum(a,center+1,right); s1=0;lefts=0;for(i=center;i>=left;i--){lefts+=a[i];if(lefts>s1)s1=lefts;}s2=0;rights=0;for(i=center+1;i<=right;i++){rights+=a[i];if(rights>s2)s2=rights;}s3=0;leftl=0;for(i=left;i<=center;i++){leftl+=a[i];if(leftl>s3)s3=leftl;}s4=0;rightl=0;for(i=right;i>=center+1;i--){rightl+=a[i];if(rightl>s4)s4=rightl;}buf[0]=s1+s2;buf[1]=s4+s3;buf[2]=left_sum;buf[3]=right_sum;max=0;for(i=0;i<=3;i++){if(buf[i]>max)max=buf[i];}return max; }}。

算法设计与分析——输油管道问题实验报告

算法设计与分析——输油管道问题实验报告

题目: 输油管道问题学号0091313000913133学生姓名张一楠朱玉婷专业(班级)09计本1班设计题目输油管道问题设计技术参数系统平台:windows 7开发工具:Microsoft Visual C++ 6.0设计要求1.掌握问题分析的方法与步骤,选择合适的方法解决问题。

2.选择合适的算法编写程序。

工作计划1:熟悉题目并理解,及找寻相关资料。

2:根据题目设计并分析算法。

3:使用Visual C++实现。

4:完成设计报告参考资料吕国英.《算法设计与分析》.北京:清华大学出版社,2009摘要本实验,我们通过综合应用算法解决了实际生活中的输油管道问题,通过比较各种算法的时间复杂度以及解决效率,采用了算法中以分治法为基础的随机划分来解决问题,利用随机选择方法找到各个油井的中位数,通过讨论论证了中位数即最优管道位置。

信息奥赛中一个问题有多个算法解决,通过比较不同算法解决问题的效率,选择最高效的一个。

在输油管道问题这个实验中得到运用。

关键词:算法设计,分治法,随机划分,随机选择,中位数目录1 需求分析.............................................................................. 错误!未定义书签。

1.1 实验内容.................................................................... 错误!未定义书签。

1.2 系统的基本逻辑模型 ....................................................... 错误!未定义书签。

1.3 确定目标系统的功能 (5)2 总体设计............................................................................. 错误!未定义书签。

算法分析与设计第二版习题答案-第三章到第五章

算法分析与设计第二版习题答案-第三章到第五章

算法设计与分析(第二版)习题答案主编:吕国英算法设计与分析(第二版)习题答案(第三章)第三章:1.#include<stdlib.h>#include<stdio.h>int main(int argc,char **argv){int n;int i,j,k;int *buf;printf("请输入n的数值:");scanf("%d",&n);buf=(int *)malloc(n*sizeof(int));for(i=0;i<n;i++){buf[i]=2;}for(i=n-2;i>=0;i--){for(j=i;j>=0;j--){buf[j]+=2;}}for(k=0;k<=n-2;k++){if(buf[k]>=10){buf[k+1]+=buf[k]/10;buf[k]%=10;}}for(i=n-1;i>=0;i--)printf("%d",buf[i]);printf("\n");return 0;}2.#include<stdio.h>int main(int argc,char **argv){int buf[6][6];int i,j;printf("任意输入6个数字:");for(i=0;i<6;i++) scanf("%d",&buf[0][i]);for(i=0;i<5;i++){ for(j=0;j<5;j++) { buf[i+1][j+1]=buf[i][j]; } buf[i+1][0]=buf[i][j];}for(i=0;i<6;i++){ for(j=0;j<6;j++) printf("%d ",buf[i][j]); printf("\n");}return 0;}3.#include<stdio.h>#define N 7int main(int argc,char **argv){int buf[N][N];int i,j,k,m,n;int a=0,b=N-1;intcount=1;for(i=0;i<(N/2)+(N%2);i++){ for(j=a;j<=b;j++) { buf[a][j]=count++; } f or(k=a+1;k<=b;k++) { buf[k][b]=count++; } for(m=b-1;m>=a;m--) { buf[b][m]=count++; } for(n=b-1;n>a;n--) { buf[n][a]=count++; } a++; b--;}for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("]",buf[i][j]); printf("\n");}return 0;}4.#include<stdio.h>#define N 5int main(int argc,char **argv){int buf[N][N];inti,j,k;int count=1;int n=0;for(i=0;i<N;i++){ for(k=0,j=n;j>=0;j--,k++) buf[j][k]=count++; n++;}for(i=0;i<N;i++){ for(j=0;j<N-i;j++) printf("]",buf[i][j]); printf("\n");}return 0;}5.#include<stdio.h>#define N 5int main(int argc,char **argv){int buf[N][N];int i,j;int a=0,b=N-1;intcount=1;for(i=0;i<N/2+N%2;i++){ for(j=a;j<=b;j++) buf[a][j]=count; for(j=a+1;j<= b;j++) buf[j][b]=count; for(j=b-1;j>=a;j--) buf[b][j]=count; for(j=b-1;j>a;j--) buf[j][a]=count; count++; a++; b--;}for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("]",buf[i][j]); printf("\n");}return 0;}6.#include<stdio.h>#include<stdlib.h>typedef struct s_node s_list;typedef s_list*link;struct s_node{char ch;int flag;link next;};link top;void push(char ch,int flag){link newnode;newnode=(link)malloc(sizeof(s_list));newnode->ch=ch;newnode->flag=flag;newnode->next=NULL;if(top==NULL) { top=newnode; }else { newnode->next=top; top=newnode; }}int pop(){int flag;linkstack;if(top!=NULL) { stack=top; top=top->next; flag=stack->flag; free(stack); }return flag;}int op(char ch){switch(ch) { case '+': return 1; break; case '-': return 2; break; case '*': return 3; break; case'/': return 4; break; default: return 5; }}void nirnava(char *buf,intcount)//count个数,buf数组{int bool=1;int min;int j;int i;int k;int flag;for(i=0;i<count;i++){if(buf[i]=='(')push(buf[i],i);if(buf[i]==')'){flag=pop();if(flag!=0){if((buf[flag-1]=='(')&&(buf[i+1]==')')){buf[flag]='!';buf[i]='!';}}min=op(buf[flag]);for(j=flag+1;j<i;j++){if(buf[j]=='('){push(buf[j],j);bool=0;continue;}elseif(buf[j]==')'){pop();bool=1;continue;}if(bool==1){if(min>op(buf[j]))min=op(buf[j]);}}if(i<count-1){if((buf[i+1]=='+')||(buf[i+1]=='-')){if(flag==0){buf[i]='!';buf[flag]='!';}elseif(op(buf[flag-1])<=min){buf[i]='!';buf[flag]='!';}}elseif((buf[i+1]=='*')||(buf[i+1]=='/')){if(flag==0){buf[i]='!';buf[flag]='!';}elseif((min>=op(buf[i+1])&&op(buf[flag-1])<=min)) {buf[i]='!';buf[flag]='!';}}}elseif(i==count-1){if(flag==0){buf[i]='!';buf[flag]='!';}elseif(op(buf[flag-1])<=min){buf[i]='!';buf[flag]='!';}}}}for(k=0;k<count;k++){if(buf[k]!='!')printf("%c",buf[k]);}printf("\n");}int main(void){char buf[255];int i;for(i=0;i<255;i++){scanf("%c",&buf[i]);if(buf[i]=='\n')break;}buf[i]='\0';nirnava(buf,i);return 0;}7.#include<stdio.h>#include<stdlib.h>int ack(int m,int n);int count=0;int main(int argc,char **argv){intm,n;scanf("%d%d",&m,&n);printf("%d\n",ack(m,n));printf("%d\n",count);return 0;}int ack(int m,int n){count++;if(m==0) return n+1;else if(n==0) return ack(m-1,1); else return ack(m-1,ack(m,n-1));}8.#include<stdio.h>char buf[1024];intis_huiwen(int a,int count){if(a==count/2) { return1; }else if(buf[a]==buf[count-a-1]) return (is_huiwen(a-1,count))&&1; else {return 0; }}int main(void){int count;inti;for(i=0;i<1024;i++) { scanf("%c",&buf[i]); if(buf[i]=='\n')break; }count=i;i--;printf("%d",is_huiwen(i,count));return 0;}9.#include<stdio.h>char buf[100];int pos(int a,int b){if(b-a==1) return 1;else if(b-a==0) return 1; else return pos(a,b-1)+pos(a,b-2);}int main(void){inta,b;scanf("%d%d",&a,&b);printf("%d",pos(a,b));return 0;}10.#include<stdio.h>#define MAX 1024int buf[MAX];int main(void){int m,n;inti;scanf("%d%d",&m,&n);for(i=0;i<MAX;i++) buf[i]=0;i=0;while(buf[i%m]==0) { buf[i%m]=1; i+=n; }for(i=0;i<m;i++) { if(buf[i]==0)printf("%d",i); }return 0;}11.#include<stdio.h>int main(void){int temp,temp1;int count=0;int n;inti;scanf("%d",&n);for(i=1;i<=n;i++) { temp=i; if(temp==5)count++; elseif(te mp==0) { temp1=i; while((temp1)==0) { temp1=temp1/10; count++; } } }printf("%d",count);return 0;}12.#include<stdio.h>int main(void){int count=0;int buf[53];inti,n;for(i=1;i<53;i++) { buf[i]=1; }for(n=2;;n++) { for(i=n;i<53;i+=n){ buf[i ]=1-buf[i]; count++; if(count>=104) break;} if(count>=104)break; }for(i=1;i<53;i ++) { if(buf[i]==1)printf("%d ",i); }printf("\n");return 0;}13.#include<stdio.h>int main(void){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(" a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e); }return 0;}14.#include<stdio.h>int main(void){int buf[3];int i;int mul;inttemp;for(i=10;i<=31;i++) { mul=i*i; temp=mul; buf[0]=temp; temp=temp /10; buf[1]=temp; temp=temp/10; buf[2]=temp; if((buf[0]==buf[1])||(buf[0] ==buf[2])||(buf[1]==buf[2])){ printf("%d^2=%d\n",i,mul);} }return0;}15.#include<stdio.h>int main(void){inta,b,c;for(a=1;a<=3;a++) for(b=1;b<=3;b++) if(a!=b){ c=6-a-b; if(c!=a&&c!=b) if((a!=1)&&((c!=1)&&(c!=3))==1) printf("a=%d,b=%d,c=% d",a,b,c);}return 0;}16.#include<stdio.h>int main(void){int k;intn;scanf("%d",&n);k=(n%4==0)+(n%7==0)*2+(n%9==0)*4;switch(k) { case7: printf("all"); break; case 6: printf("7 and 9"); break; case5: printf("4 and 9"); break; case 4: printf("9"); break; case 3: printf("4 and 7"); break; case 2: printf("7"); break; case1: printf("4"); break; case 0: printf("none"); break; }return0;}17.#include<stdio.h>int main(void){int a,b,c,d;printf("please think of a number between 1 and 100.\n");printf("your number divided by 3 has a remainder of");scanf("%d",&a);printf("your number divided by 4 has a remainder of");scanf("%d",&b);printf("your number divided by 7 has a remainder of");scanf("%d",&c);printf("let me think amoment...\n");d=36*c+28*a+21*b;while(d>84) d=d-84;printf("your numberwas %d\n",d);return 0;}18.#include<stdio.h>int main(void){int buf[10];int i,j;int mul;int temp1,temp2;intbool;for(i=5000;i<=9999;i++) { bool=0; for(j=0;j<10;j++)buf[j]=0; temp1=i; while(temp1>0){ if((++buf[temp1])>1) { bool=1; break; } temp1/=10; } if(bool==1)continue; mul=i*2; temp2=mul; while(temp2>0){ if((++buf[t emp2])>1) { bool=1; break; } temp2/=10;} if(bool==1)continue; pri ntf("2*%d=%d\n",i,mul); }return 0;}19.#include<stdio.h>#include<stdlib.h>int ppow(int a,int b){int mul=1;int i;for(i=0;i<b;i++) { mul=a*mul; }return mul;}int main(void){int t;char buf[10];int i,j,k;intsum=0;for(i=0;i<10;i++) { scanf("%c",&buf[i]); if(buf[i]=='\n')break; }buf[i]= '\0';for(j=0;j<i;j++) { if((buf[j]>='0')&&(buf[j]<='9'))buf[j]=buf[j]-48; elseif((buf[j]>='A')&&(buf[j]<='F')) buf[j]=buf[j]-55;else exit(1); }k=0;for(j=i-1;j>=0;j--) { t=ppow(16,k); sum=sum+t*(int)buf[j]; k++; }printf("%d\n",sum);return 0;}20.#include<stdio.h>int main(void){int a;int b;int c;int i;intbuf[10];for(a=10;a<=99;a++) { for(i=0;i<10;i++)buf[i]=0; if((++buf[a]>1)||(++b uf[a/10]>1))continue; for(b=100;b<=999;b++){ for(i=0;i<10;i++) { if((i!=a)& &i!=a/10) buf[i]=0; } if((++buf[b]>1)||(++buf[b/10]>1)||(++buf[b/100]>1)) conti nue; c=a*b; if(c<10000&&c>999) { if((++buf[c]>1)||(++buf[c/10]>1)||(++buf[c /100]>1)||(++buf[c/1000]>1)) continue; else printf("%d*%d=%d\n",a,b,c); }} }return 0;}21.#include<stdio.h>int main(void){int a;int b;int i;int t;int buf[10];int bool;for(a=317;a<1000;a++) { bool=0; for(i=0;i<10;i++)buf[i]=0; if((++buf[ a]>1)||(++buf[a/10]>1)||(++buf[a/100]>1))continue; b=a*a; t=b; for(i=0;i<6;i++ ){ if(++buf[t]>1) { bool=1; break; } t=t/10;} if(bool==1)continue; p rintf("%d^2=%d\n",a,b); }return 0;}22.#include<stdio.h>int main(void){intbuf[100];int i;int n;int max;inttemp;for(i=1;i<100;i++) { scanf("%d",&buf[i]); if(buf[i]==0)break; }n=i;max =buf[1]+buf[2]+buf[3]+buf[4];for(i=2;i!=1;i++) { temp=buf[i]+buf[(i+1)]+buf[(i+2 )]+buf[(i+3)]; if(temp>max)max=temp; }printf("max=%d\n",max);return0;}23.#include<stdio.h>void nirnava(int n){if(n<10) printf("%d",n);else { nirnava(n/10); printf("%d ",n); }}int main(void){int count=0;int n;int i;int t;scanf("%d",&n);t=n;while(t>0) { printf("%d",t); t=t/10; count++; }printf("\n");nirnava(n);printf("\n%d位数\n",count);}24.#include<stdio.h>int main(void){int buf[4]={2,3,5,7};int i,j,k,temp,m;int bool;int mul;for(i=0;i<4;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)for(m=0;m<4;m++){bool=0;mul=(buf[i]+buf[j]*10+buf[k]*100)*buf[m];if(mul<1000)continue;temp=mul;while(temp>0){if((temp==2)||(temp==3)||(temp==5)||(temp==7)){}else{bool=1;break;}temp/=10;}if(bool==0){printf("%d%d%d * %d = %d\n",buf[k],buf[j],buf[i],buf[m],mul); }}return 0;}25.#include<stdio.h>int main(void){int buf[4]={2,3,5,7};int i,j,k,m,n;int bool;int mul,mul1,mul2;int temp,temp1,temp2;for(i=0;i<4;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)for(m=0;m<4;m++)for(n=0;n<4;n++){bool=0;mul=(buf[i]+buf[j]*10+buf[k]*100)*(buf[m]+buf[n]*10);mul1=(buf[i]+buf[j]*10+buf[k]*100)*buf[m];mul2=(mul-mul1)/10;if((mul<10000)||(mul1<1000)||(mul2<1000))continue;temp=mul;temp1=mul1;temp2=mul2;while(temp>0){if((temp==2)||(temp==3)||(temp==5)||(temp==7)){}else{bool=1;break;}temp/=10;}if(bool==0){while(temp1>0){if((temp1==2)||(temp1==3)||(temp1==5)||(temp1==7)){}else{bool=1;break;}temp1/=10;}}if(bool==0)while(temp2>0){if((temp2==2)||(temp2==3)||(temp2==5)||(temp2==7)){}else{bool=1;break;}temp2/=10;}if(bool==0){printf("第一行: %d%d%d\n第二行: %d%d\n第三行: %d\n第四行: %d\n第五行: %d\n\n\n\n\n",buf[i],buf[j],buf[k],buf[m],buf[n],mul1,mul2,mul);}}return 0;}26.#include<stdio.h>//从a到b是不是循环节int is_xunhuan(int *buf,int a,int b) {int i;if(a==b){for(i=1;i<10;i++){if(buf[a]==buf[a+i]){}elsereturn 0;}}elsefor(i=a;i<=b;i++){if(buf[i]==buf[i+b-a+1]){}else{return 0;}}return 1;}int main(void){int buf[1024];int yushu;int m,n;int i,j,k;scanf("%d%d",&m,&n);yushu=m;buf[0]=0;i=1;while(yushu!=0){yushu=yushu*10;buf[i]=yushu/n;yushu=yushu%n;i++;if(i==1024)break;}if(i<1024){printf("有限小数\n");printf("%d.",buf[0]);for(j=1;j<i;j++)printf("%d",buf[j]);printf("\n");}else{printf("循环小数\n");for(i=1;i<100;i++)for(j=i;j<200;j++){if(is_xunhuan(buf,i,j)){printf("%d.",buf[0]);if(i>1){for(k=1;k<i;k++)printf("%d",buf[k]);}printf("(");for(k=i;k<=j;k++)printf("%d",buf[k]);printf(")");printf("\n");return 0;}}}return 0;}27.#include<stdio.h>int main(void){int n;char eng[12][10]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};scanf("%d",&n);printf("%s\n",eng[n-1]);return 0;}第四章1.#include<stdio.h>int main(void){int buf[100];int n;int i,j,k;scanf("%d",&n);for(i=0;i<n;i++)buf[i]=2;for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++) {buf[j]+=2;}}for(j=0;j<n;j++){if(buf[j]>=10) {buf[j+1]+=buf[j]/10; buf[j]=buf[j];}}for(i=n-1;i>=0;i--)printf("%d",buf[i]); printf("\n");return 0;}2.#include<stdio.h>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<stdio.h>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<stdio.h>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<stdio.h>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')return0; }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) return1;else if(is_safe(row,col)) {chess[row][col]='Q';for(i=0;i<8;i++) for(j=0;j<8;j++) { result+=queen(i,j,n+1); if(result>0) break; }if(result>0) return1;else { chess[row][col]='X'; return 0; } } else return0;}6.#include<stdio.h>int main(void){inti,j,k;for(i=1;i<=33;i++) for(j=1;j<=50;j++) {k=100-i-j;if(k%2==0) { if(3*i+2*j+k/2==100) printf("大马%d\n中马%d\n小马%d\n\n\n",i,j,k);}}return 0;}7.#include<stdio.h>int main(void){int i;for(i=1;i<=10000;i++){if(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0) printf("%d\n",i);}return 0;}8.#include<stdio.h>int main(void){int i;int sum;int a1,a2,a3,a4;for(i=1000;i<=9999;i++){a1=i;a2=i/10;if(a1!=a2){a3=i/100;if(a1!=a3&&a2!=a3){a4=i/1000;if(a1!=a4&&a2!=a4&&a3!=a4){sum=(a1+a2+a3+a4)*(a1+a2+a3+a4);if(i%sum==0)printf("%d\n",i);}}}}return 0;}9.#include<stdio.h>#define N 10void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2);int main(void){int a[N]={2,3,4,5,34,7,9,6,43,21};int min1,min2;int max1,max2;max_min(a,0,N-1,&min1,&min2,&max1,&max2);printf("min1=%d\nmin2=%d\nmax1=%d\nmax2=%d\n",min1,min2,max1,max2); return 0;}void max_min(int *a,int m,int n,int *min1,int *min2,int *max1,int *max2){int lmin1,lmin2,lmax1,lmax2;int rmin1,rmin2,rmax1,rmax2;int mid;if(m==n){*min1=*min2=*max1=*max2=a[m];}elseif(m==n-1){if(a[m]<a[n]){*min1=a[m];*min2=a[n];*max1=a[n];*max2=a[m];}else{*min1=a[n];*min2=a[m];*max1=a[m];*max2=a[n];}}else{mid=(m+n)/2;max_min(a,m,mid,&lmin1,&lmin2,&lmax1,&lmax2);max_min(a,mid+1,n,&rmin1,&rmin2,&rmax1,&rmax2);if(lmin1<rmin1){if(lmin2<rmin1){*min1=lmin1;*min2=lmin2;}else{*min1=lmin1;*min2=rmin1;}}elseif(rmin2<lmin1) {*min1=rmin1; *min2=rmin2; }else{*min1=rmin1; *min2=lmin1; }if(lmax1>rmax1){if(lmax2>rmax1) {*max1=lmax1;*max2=lmax2;}else{*max1=lmax1;*max2=rmax1;}}elseif(rmax2>lmax1) {*max1=rmax1; *max2=rmax2; }else{*max1=rmax1; *max2=lmax1; }}}10.#include<stdio.h>int add(int *a,int flag,int right);int main(void){int a[10]={1,2,3,4,5,6,7,8,9,10};int sum=add(a,0,9);printf("%d\n",sum);return 0;}int add(int *a,int flag,int right){int mid;if(flag==right){return a[flag];}elseif(flag==right-1){return a[flag]+a[right];}else{mid=(flag+right)/2;return add(a,flag,mid)+add(a,mid+1,right); }}11.#include<stdio.h>int main(void){int a[5][3]={{-50,17,-42},{-47,-19,-3},{36,-34,-43},{-30,-43,34},{-23,-8,-45}};int i,j;int max,n;int sum=0;for(i=0;i<5;i++){max=a[i][0];n=0;for(j=1;j<3;j++){if(a[i][j]>max){max=a[i][j];n=j;}}sum+=max;printf("a[%d][%d]=%d\n",i,n,max);}printf("%d\n",sum);return 0;}12.#include<stdio.h>#include<stdlib.h>#define N 4void matrix_mul(int *mul1,int*mul2,int *mul3,int length);void matrix_add_sub(int * A,int * B,int * C,int m,char ch);void update_half_value(int * A,int * B,int m);void get_half_value(int * A,int * B,int m);int main(void){int i,j;int mul1[N*N]={1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6};intmul2[N*N]={7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2};intmul3[N*N];matrix_mul(mul1,mul2,mul3,N);for(i=0;i<N*N;i++) { printf("]",mul3[ i]); if((i+1)%N==0) printf("\n"); }return 0;}void matrix_add_sub(int * A,int * B,int * C,int m,char ch){ inti; for(i=0;i<m*m;i++) { if(ch=='+') C[i]=A[i]+B[i]; else C[i]= A[i]-B[i]; }}void update_half_value(int * A,int * B,int m){ inti,j; for(i=0;i<m/2;i++) { for(j=0;j<m/2;j++) { B[i*m+j]=A[i*m/2+j]; } }}void get_half_value(int * A,int * B,int m){ inti,j; for(i=0;i<m/2;i++) { for(j=0;j<m/2;j++) { A[i*m/2+j]=B[i*m+j]; } }}void matrix_mul(int *A,int *B,int *C,int m){if(m==2) { intD,E,F,G,H,I,J; D=A[0]*(B[1]-B[3]); E=A[3]*(B[2]-B[0]); F=(A[2]+A[3])*B[0]; G=(A[0]+A[1])*B[3]; H=(A[2]-A[0])*(B[0]+B[1]); I=(A[1]-A[3])*(B[2]+B[3]); J=(A[0]+A[3])*(B[0]+B[3]); C[0]=E+I+J-G; C[1]=D+G; C[2]=E+F; C[3]=D+H+J-F; return ; }else { intA1[m*m/4],A2[m*m/4],A3[m*m/4],A4[m*m/4]; intB1[m*m/4],B2[m*m/4],B3[m*m/4],B4[m*m/4]; intC1[m*m/4],C2[m*m/4],C3[m*m/4],C4[m*m/4]; intD[m*m/4],E[m*m/4],F[m*m/4],G[m*m/4],H[m*m/4],I[m*m/4],J[m*m/4]; int temp1[m*m/4],temp2[m*m/4]; get_half_value(A1,&A[0],m); get_half_value(A2, &A[m/2],m); get_half_value(A3,&A[m*m/2],m); get_half_value(A4,&A[m*m/2 +m/2],m); get_half_value(B1,&B[0],m); get_half_value(B2,&B[m/2],m); get_ half_value(B3,&B[m*m/2],m); get_half_value(B4,&B[m*m/2+m/2],m); matrix_a dd_sub(B2,B4,temp1,m/2,'-'); matrix_mul(A1,temp1,D,m/2); matrix_add_sub(B3,B1,temp1,m/2,'-'); matrix_mul(A4,temp1,E,m/2); matrix_add_sub(A3,A4,temp1,m/2,'+'); matri x_mul(temp1,B1,F,m/2); matrix_add_sub(A1,A2,temp1,m/2,'+'); matrix_mul(temp1,B4,G,m/2); matrix_add_sub(A3,A1,temp1,m/2,'-'); matrix_add_sub(B1,B2,temp2,m/2,'+'); matrix_mul(temp1,temp2,H,m/2); m atrix_add_sub(A2,A4,temp1,m/2,'-'); matrix_add_sub(B3,B4,temp2,m/2,'+'); matrix_mul(temp1,temp2,I,m/2); ma trix_add_sub(A1,A4,temp1,m/2,'+'); matrix_add_sub(B1,B4,temp2,m/2,'+'); matri x_mul(temp1,temp2,J,m/2); matrix_add_sub(E,I,temp1,m/2,'+'); matrix_add_sub(J ,G,temp2,m/2,'-'); matrix_add_sub(temp1,temp2,C1,m/2,'+'); matrix_add_sub(D,G,C2,m/2,'+'); matrix_add_sub(E,F,C3,m/2,'+'); matrix_add_sub(D,H,temp1,m/2,'+'); matrix_add _sub(J,F,temp2,m/2,'-'); matrix_add_sub(temp1,temp2,C4,m/2,'+'); update_half_value(C1,&C[0],m); update_half_value(C2,&C[m/2],m); update_half_value(C3,&C[m*m/2],m); updat e_half_value(C4,&C[m*m/2+m/2],m); return ; }}13.#include<stdio.h>intmain(void){int a[6][7]={ {16,4,3,12,6,0,3}, {4,-5,6,7,0,0,2}, {6,0,-1,-2,3,6,8}, {5,3,4,0,0,-2,7}, {-1,7,4,0,7,-5,6}, {0,-1,3,4,12,4,2}};intb[6][7],c[6][7];int i,j,k;int max;int flag;inttemp;for(i=0;i<6;i++) for(j=0;j<7;j++) {b[i][j]=a[i][j];c[i][j]=-1; }for(i=1;i<5;i++) { for(j=0;j<7;j++){ max=0; for(k=j-2;k<=j+2;k++) { if(k<0) continue; else if(k>6) break; else { if(b[i][j ]+b[i-1][k]>max) { max=b[i][j]+b[i-1][k]; flag=k; } } } b[i][j]=max; c[i][j]=flag;} }for(j=1;j<=5;j++) { max=0; for(k=j-2;k<=j+2;k++){ if(k<0) continue; else if(k>6) break; else { if(b[i][j]+ b[i-1][k]>max) { max=b[i][j]+b[i-1][k]; flag=k; } }} b[i][j]=max; c[i][j]=flag; }max=0;for(j=1;j<=5;j++) { if(b[i][j]>max){ max=b[i][j]; flag=j;} }printf("%d\n",max);temp=c[i][flag];pri ntf("]",a[i][temp]);for(j=i;j>0;j--) { temp=c[j][temp]; printf("]",a[j-1][temp]); }printf("\n");return 0;}14.#include<stdio.h>int main(void){intA[6]={0,3,7,9,12,13};int B[6]={0,5,10,11,11,11};int C[6]={0,4,6,11,12,12};intAB[6][6];int temp[6];int abc[6];int max;int flag;inti,j,k;for(i=0;i<=5;i++) { max=0; for(j=0;j<=i;j++){ AB[i][j]=A[i-j]+B[j]; if(AB[i][j]>max) max=AB[i][j];} temp[i]=max; }max=0;for(i=0;i<=5;i ++) { abc[i]=temp[i]+C[5-i]; if(abc[i]>max){ max=abc[i]; flag=i;} }printf("max=%d\n",max);printf("c=%d \n",5-flag);max=max-C[5-flag];for(i=0;i<=flag;i++) { if(AB[flag][i]==max){ printf("b=%d\n",i); printf("a= %d\n",flag-i); break;} }return 0;}16.#include<stdio.h>#define N 100int search(int*a,int left,int right);int sum_buf(int *a,int left,int right);int main(void){int a[N];int i;int s;for(i=0;i<N;i++) a[i]=1;a[24]=2;s=search(a,0,N-1);printf("%d\n",s);return 0;}int sum_buf(int *a,int left,int right){int i;intsum=0;for(i=left;i<=right;i++) sum+=a[i];return sum;}int search(int *a,int left,int right){int mid=(left+right)/2;if(left==right-1) { if(a[left]<a[right])returnright; elsereturn left; }if(mid*2!=(right+left-1)) { if(sum_buf(a,left,mid-1)>sum_buf(a,mid+1,right)){ return search(a,left,mid-1);} elseif(sum_buf(a,left,mid-1)<sum_buf(a,mid+1,right)) { returnsearch(a,mid+1,right); }else returnmid; }else { if(sum_buf(a,left,mid)>sum_buf(a,mid+1,right))returnsearch(a,left,mid); elsereturn search(a,mid+1,right); }}17.#include<stdio.h>int job[6][2]={{3,8},{12,10},{5,9},{2,6},{9.3},{11,1}};intx[6],bestx[6],f1=0,bestf,f2[7]={0};void try(int i);void swap(int a,int b);intmain(void){inti,j;bestf=32767;for(i=0;i<6;i++) x[i]=i;try(0);for(i=0;i<6;i++) printf("%d",bestx[i]);printf("\nbestf=%d\n",bestf);return 0;}void try(int i){intj;if(i==6) { for(j=0;j<6;j++)bestx[j]=x[j]; bestf=f2[i]; }else { for(j=i;j<6;j ++){ f1=f1+job[x[j]][0]; if(f2[i]>f1) f2[i+1]=f2[i]+job[x[j]][1]; else f2[i+1]=f1 +job[x[j]][1]; if(f2[i+1]<bestf) { swap(i,j); try(i+1); swap(i,j); } f1=f1 -job[x[j]][0];} }}void swap(int i,int j){inttemp;temp=x[i];x[i]=x[j];x[j]=temp;}18.#include<stdio.h>#define N 5 //N个数字#define M 2 //M个加号char buf[N];int a[N];char b[M+1][N];int c[M+1];int try(int t);void swap(int t1,int t2);int add();void output();int min=99999;int main(){int i;for(i=0;i<N;i++){scanf("%c",&buf[i]);}a[0]=0;for(i=1;i<=M;i++){a[i]=1;}for(;i<N;i++){a[i]=0;}try(1);output();printf("%d\n",min);return 0;}int try(int t){int j;int i;int sum;if(t>=N){sum=add();if(sum<min){min=sum;for(i=0;i<M+1;i++) {c[i]=atoi(b[i]);}}}else{for(j=t;j<N;j++) {//if(a[t]!=a[j]){swap(t,j);try(t+1);swap(t,j);}//else//try(t+1);}}}void swap(int t1,int t2) {int t;t=a[t1];a[t1]=a[t2];a[t2]=t;}int add(){int sum=0;int i=0;int j;int k=0;int h=0;for(i=0;i<M+1;i++)for(j=0;j<N;j++)b[i][j]='Q';i=0;j=0;h=0;k=0;for(j=0;j<N;j++){if(a[j]==1){h=0;i++;b[i][h]=buf[j];//printf("%d ",atoi(b[i]));//printf("%d %d %c \n",i,h,b[i][h]);h++;}else{b[i][h]=buf[j];//printf("%d %d %c \n",i,h,b[i][h]);//printf("%d ",atoi(b[i]));h++;}}for(i=0;i<M+1;i++){sum+=atoi(b[i]);}return sum;}void output(){int i;for(i=0;i<M+1;i++){printf("%d",atoi(b[i]));if(i!=M)printf("+");}printf("=");}19.#include<stdio.h>int main(void){int buf[100];int m,n;inti,j;buf[0]=1;buf[1]=1;scanf("%d%d",&n,&m);for(i=1;i<n;i++) { buf[i+1]=buf[i];。

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院山东交通学院第一章测试1.解决一个问题通常有多种方法。

若说一个算法“有效”是指( )A:这个算法能在一定的时间和空间资源限制内将问题解决B:这个算法能在人的反应时间内将问题解决C:这个算法比其他已知算法都更快地将问题解决D:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)答案:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)2.农夫带着狼、羊、白菜从河的左岸到河的右岸,农夫每次只能带一样东西过河,而且,没有农夫看管,狼会吃羊,羊会吃白菜。

请问农夫能不能过去?()A:不一定B:不能过去 C:能过去答案:能过去3.下述()不是是算法的描述方式。

A:自然语言 B:E-R图 C:程序设计语言 D:伪代码答案:E-R图4.有一个国家只有6元和7元两种纸币,如果你是央行行长,你会设置()为自动取款机的取款最低限额。

A:40 B:29 C:30 D:42答案:305.算法是一系列解决问题的明确指令。

()A:对 B:错答案:对6.程序=数据结构+算法()A:对 B:错答案:对7.同一个问题可以用不同的算法解决,同一个算法也可以解决不同的问题。

()A:错 B:对答案:对8.算法中的每一条指令不需有确切的含义,对于相同的输入不一定得到相同的输出。

( )A:错 B:对答案:错9.可以用同样的方法证明算法的正确性与错误性 ( )A:错 B:对答案:错10.求解2个数的最大公约数至少有3种方法。

( )A:对 B:错答案:错11.没有好的算法,就编不出好的程序。

()A:对 B:错答案:对12.算法与程序没有关系。

( )A:错 B:对答案:错13.我将来不进行软件开发,所以学习算法没什么用。

( )A:错 B:对答案:错14.gcd(m,n)=gcd(n,m m od n)并不是对每一对正整数(m,n)都成立。

2020智慧树知到《算法分析与设计》章节测试完整答案

2020智慧树知到《算法分析与设计》章节测试完整答案

2020智慧树知到《算法分析与设计》章节测试完整答案智慧树知到《算法分析与设计》章节测试答案第一章1、给定一个实例,如果一个算法能得到正确解答,称这个算法解答了该问题。

答案: 错2、一个问题的同一实例可以有不同的表示形式答案: 对3、同一数学模型使用不同的数据结构会有不同的算法,有效性有很大差别。

答案: 对4、问题的两个要素是输入和实例。

答案: 错5、算法与程序的区别是()A:输入B:输出C:确定性D:有穷性答案: 有穷性6、解决问题的基本步骤是()。

(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明A:(3)(1)(4)(5)(2)B:(3)(4)(1)(5)(2)C:(3)(1)(5)(4)(2)D:(1)(2)(3)(4)(5)答案: (3)(1)(5)(4)(2)7、下面说法关于算法与问题的说法错误的是()。

A:如果一个算法能应用于问题的任意实例,并保证得到正确解答,称这个算法解答了该问题。

B:算法是一种计算方法,对问题的每个实例计算都能得到正确答案。

C:同一问题可能有几种不同的算法,解题思路和解题速度也会显著不同。

D:证明算法不正确,需要证明对任意实例算法都不能正确处理。

答案: 证明算法不正确,需要证明对任意实例算法都不能正确处理。

8、下面关于程序和算法的说法正确的是()。

A:算法的每一步骤必须要有确切的含义,必须是清楚的、无二义的。

B:程序是算法用某种程序设计语言的具体实现。

C:程序总是在有穷步的运算后终止。

D:算法是一个过程,计算机每次求解是针对问题的一个实例求解。

答案: 算法的每一步骤必须要有确切的含义,必须是清楚的、无二义的。

,程序是算法用某种程序设计语言的具体实现。

,算法是一个过程,计算机每次求解是针对问题的一个实例求解。

9、最大独立集问题和()问题等价。

A: 最大团B:最小顶点覆盖C:区间调度问题D:稳定匹配问题答案: 最大团,最小顶点覆盖10、给定两张喜欢列表,稳定匹配问题的输出是( ) 。

算法分析与设计(习题答案)

算法分析与设计(习题答案)

算法分析与设计教程习题解答第1章 算法引论1. 解:算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列计算方法。

频率计数是指计算机执行程序中的某一条语句的执行次数。

多项式时间算法是指可用多项式函数对某算法进行计算时间限界的算法。

指数时间算法是指某算法的计算时间只能使用指数函数限界的算法。

2. 解:算法分析的目的是使算法设计者知道为完成一项任务所设计的算法的优劣,进而促使人们想方设法地设计出一些效率更高效的算法,以便达到少花钱、多办事、办好事的经济效果。

3. 解:事前分析是指求出某个算法的一个时间限界函数(它是一些有关参数的函数);事后测试指收集计算机对于某个算法的执行时间和占用空间的统计资料。

4. 解:评价一个算法应从事前分析和事后测试这两个阶段进行,事前分析主要应从时间复杂度和空间复杂度这两个维度进行分析;事后测试主要应对所评价的算法作时空性能分布图。

5. 解:①n=11; ②n=12; ③n=982; ④n=39。

第2章 递归算法与分治算法1. 解:递归算法是将归纳法的思想应用于算法设计之中,递归算法充分地利用了计算机系统内部机能,自动实现调用过程中对于相关且必要的信息的保存与恢复;分治算法是把一个问题划分为一个或多个子问题,每个子问题与原问题具有完全相同的解决思路,进而可以按照递归的思路进行求解。

2. 解:通过分治算法的一般设计步骤进行说明。

3. 解:int fibonacci(int n) {if(n<=1) return 1;return fibonacci(n-1)+fibonacci(n-2); }4. 解:void hanoi(int n,int a,int b,int c) {if(n>0) {hanoi(n-1,a,c,b); move(a,b);hanoi(n-1,c,b,a); } } 5. 解:①22*2)(−−=n n f n② )log *()(n n n f O =6. 解:算法略。

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

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

算法设计与分析第2版吕国英第三章课后习题答案3.1//计算2+22+222+...+222 (2)void main(){int i,n,sum=0;print("请输入最后一个因子的位数\n");scanf("%d",&n);for(i=1;i<=n;i++)sum=sum+((int)pow(10,i)-1)/9*2;print("2+22+222+...+222……2=%d\n",sum); }3.2显示{5,7,4,8,9,1}的方阵方式main(){int i,j,t,ori[6]={5,7,4,8,9,1};for(i=0;i<6;i++){for(j=0;j<6;j++){t=(j-i)<0?j-i+6:j-i;printf("%d ",ori[t]);}printf("\n");}}3.3main(){int n;int **up(int **array);scanf("%d",&n);int arr[1][1]={{n*n}};for(j=1;j<n;j++)< p="">arr=up(**arr,j);}int **up(int **array,n){int upN=n+1;int[upN][upN] tem;tem[1][1]=array[1][1]-pow(n+1,2); for(i=1;i<=n;i++)tem[1][i]=tem[1][i-1]+1;for(i=1;i<=n;i++)tem[n][i]=tem[n][i-1]+1;for(i=1;i<=n;i++)tem[n][n-i]=tem[n][n+1-i]+1;for(i=1;i<n;i++)< p="">tem[1][n-i]=tem[1][n-i+1]+1 return **tem;}3.4main(){int i,j,t=0,next=1,n;printf("请输入n\n");scanf("%d",&n);printf("显示效果如下\n");for(i=1;i<=n;i++){for(j=1;j<=n-i+1;j++){if(j==1)t=next;elset=t+i+j-1;if(j==2)next=t-1;printf("%d ",t);}printf("\n");}}//思想:每一行的第二个数为next,下一行的第一个数为next-13.5main(){int n,i,j,k;int arr[100][100]={{0}};//动态定义数组太难,所以在系统直接定义一个100*100的方阵,可以处理部分小问题for(i=0;i<100;i++)for(j=0;j<100;j++)arr[i][j]=0;printf("请输入n\n");scanf("%d",&n);/*if(n%2==0){for(k=0;k<="" p="">for(i=k;i<n-k;i++)< p="">for(j=k;j<n-k;j++)< p="">arr[i][j]=k+1;}else{for(k=0;k<(n+1)/2;k++)for(i=k;i<n-k;i++)< p="">for(j=k;j<n-k;j++)< p="">arr[i][j]=k+1;}*///可将第一个for循环中的判断条件统一改为k<(n+1)/2 for(k=0;k<(n+1)/2;k++)for(i=k;i<n-k;i++)< p="">for(j=k;j<n-k;j++)< p="">arr[i][j]=k+1;printf("显示效果如下:\n")for(i=0;i<n;i++)< p="">{for(j=0;j<n;j++)< p="">printf("%2d",arr[i][j]);printf("\n");}}3.7main(){int ack(int m,int n);int m,n,score;printf("请输入ackermann函数的m,n:\n");printf("m:");scanf("%d",&m);printf("n:");scanf("%d",&n);score=ack(m,n);printf("ack(%d,%d)=%d\n",m,n,score); }int ack(int m,int n){if(m==0)return n+1;elseif(n==0)return ack(m-1,1);elsereturn ack(m-1,ack(m,n-1));}3.8main(){char str[40];int i,l,t=1;printf("Please input a string!\n"); scanf("%s",str);l=strlen(str);for(i=0;i<="" p="">if(str[i]!=str[l-i-1])t=0;if(t)printf("The string is Huiwen!\n"); elseprintf("The string is not Huiwen!\n"); }3.11main(){int i,n,sum=0;//sum为零的个数int zero(int pro);printf("此程序用于计算1*2*3*…*n所得的数末尾有多少个零。

算法分析与设计第3章课后习题答案

算法分析与设计第3章课后习题答案

第3章作业解答设有4个矩阵连乘积ABCD ,设它们的维数分别为A:45×8,B:8×40,C:40×25,D:25×10,请求出它们的最优计算次序及对应的最少计算量。

解:设A 1=A, A 2=B, A 3=C, A 4=Dp 0=45,p 1=8,p 2=40,p 3=25,p 4=10 ,用两个二维数组m 和s 记录中间结果,其中,m[i][j]记录矩阵连乘积A[i:j]的最少计算量,s[i][j]记录A[i:j]的最优断开位置。

由动态规划思想,得递归式为:⎪⎩⎪⎨⎧<+++==-<≤j i p p p j k m k i m j i j i m j k i }],1[],[{min 0],[1jk i 其中,k 的取值有j-i 种可能:i,i+1,...,j-1. 计算过程如下: (1) m[i][i]=0, i=1,2,3,4 (2) 求m[i][i+1], i=1,2,3m[1][2]= p 0×p 1×p 2=45×8×40=14400 s[1][2]=1 m[2][3]= p 1×p 2×p 3=8×40×25=8000 s[2][3]=2 m[3][4]= p 2×p 3×p 4=40×25×10=10000 s[3][4]=3 (3) 求m[i][i+2], i=1,2m[1][3]=min{m[1][1]+m[2][3]+p 0×p 1×p 3, m[1][2]+m[3][3]+p 0×p 2×p 3 } =min{8000+45×8×25,14400+45×40×25} =min{17000, 59400} =17000 s[1][3]=1m[2][4]=min{m[2][2]+m[3][4]+p1×p2×p4, m[2][3]+m[4][4]+p1×p3×p4 }=min{10000+8×40×10,8000+8×25×10}=min{13200, 10000} =10000s[2][4]=3(4) 求m[i][i+3], i=1m[1][4]=min{m[1][1]+m[2][4]+p0×p1×p4 ,m[1][2]+m[3][4]+p0×p2×p4 ,m[1][3]+m[4][4]+p0×p3×p4 }=min{10000+45×8×10, 14400+10000+45×40×10, 17000+45×25×10 }=min{13600, 42400, 28250} =13600s[1][4]=1根据以上结果可得数组m, s如下:m[1][4]即A[1:4]的最少计算量,也即ABCD连乘积的最少计算量为13600。

算法分析与设计第二版习题答案-第三章到第五章

算法分析与设计第二版习题答案-第三章到第五章
{
int bool=1;
int min;
int j;
int i;
int k;
int flag;
for(i=0;i<count;i++)
{
if(buf[i]=='(')
push(buf[i],i);
if(buf[i]==')')
{
flag=pop();
算法设计与分析(第二版)习题答案 主编:吕国英
算法设计与分析(第二版)习题答案(第三章)
第三章:
1.#include<stdlib.h>#include<stdio.h>int main(int argc,char **argv){int n;int i,j,k;int *buf;printf("请输入n的数值:");
;}for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("]",buf[i][j]); printf("\n");}return
0;}6.#include<stdio.h>#include<stdlib.h>typedef struct s_node s_list;typedef s_list *link;struct s_node{char ch;int flag;link next;};link top;void push(char ch,int flag){link newnode;newnode=(link)malloc(sizeof(s_list));newnode->ch=ch;newnode- >flag=flag;newnode-

算法设计与分析课后习题答案

算法设计与分析课后习题答案

5. (25%) We want to know how many students are taking both CS2210 and CS2211 this term. Let A and B be the class lists of CS2210 and CS2211. Each of A and B consists of unique student IDs of the corresponding class. To keep it simple, we assume that the two classes have the same number of students, denoted by n. 5.1 Write an algorithm in pseudocode to count the number of students who are taking both CS2210 and CS2211 this term. 5.2 Compute the worst case running time T (n) of your algorithm with respect to the class size n. 5.3 Give the best Big-Oh complexity characterization of T (n). Solution 1: 5.1 Algorithm countCommon(A, B, n) Input: Two integer arrays A and B with both size of n Output: Number of common elements in A and B e ← 0 //number of common elements for i ← 0 to n − 1 do for j ← 1 to n − 1 do if B [j ] = A[i] then e=e+1 break return e 5.2 The worst case occurs when there are no common elements in A and B. In such case, every element in A needs to be compared with every element in B. This algorithm involves a nested “for” loop. We analyze the inner-most “for” loop first. In each iteration of the inner “for” loop, only a number of constant c operations are performed (mainly one comparison). The number of iterations of the inner “for” loop is n. Thus, the total number of operations performed in this loop is cn. As for the outer (or first) “for” loop, the number of iterations is again n. In each iteration of the outer “for” loop, it performs the work of the inner loop. Therefore, the total work done by the outer “for” loop is n × cn = cn2 . Consequently T (n) = cn2 + c′ where c′ is the number of operations for initializing e and returning e at the end. 5.3 T (n) = cn2 + c′ is O (n2 ). (Proof is straightforward.)

算法设计与分析书后参考答案

算法设计与分析书后参考答案

参考答案第1章一、选择题1. C2. A3. C4. C A D B5. B6. B7. D 8. B 9. B 10. B 11. D 12. B二、填空题1. 输入;输出;确定性;可行性;有穷性2. 程序;有穷性3. 算法复杂度4. 时间复杂度;空间复杂度5. 正确性;简明性;高效性;最优性6. 精确算法;启发式算法7. 复杂性尽可能低的算法;其中复杂性最低者8. 最好性态;最坏性态;平均性态9. 基本运算10. 原地工作三、简答题1. 高级程序设计语言的主要好处是:(l)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作;(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可移植性好、重用率高;(4)把复杂琐碎的事务交给编译程序,所以自动化程度高,发用周期短,程序员可以集中集中时间和精力从事更重要的创造性劳动,提高程序质量。

2. 使用抽象数据类型带给算法设计的好处主要有:(1)算法顶层设计与底层实现分离,使得在进行顶层设计时不考虑它所用到的数据,运算表示和实现;反过来,在表示数据和实现底层运算时,只要定义清楚抽象数据类型而不必考虑在什么场合引用它。

这样做使算法设计的复杂性降低了,条理性增强了,既有助于迅速开发出程序原型,又使开发过程少出差错,程序可靠性高。

(2)算法设计与数据结构设计隔开,允许数据结构自由选择,从中比较,优化算法效率。

(3)数据模型和该模型上的运算统一在抽象数据类型中,反映它们之间内在的互相依赖和互相制约的关系,便于空间和时间耗费的折衷,灵活地满足用户要求。

(4)由于顶层设计和底层实现局部化,在设计中出现的差错也是局部的,因而容易查找也容易纠正,在设计中常常要做的增、删、改也都是局部的,因而也都容易进行。

《算法设计与分析实用教程》习题参考解答

《算法设计与分析实用教程》习题参考解答

《算法设计与分析实用教程》习题参考解答《算法设计与分析实用教程》参考解答1-1 加减得1的数学游戏西西很喜欢数字游戏,今天他看到两个数,就想能否通过简单的加减,使最终答案等于1。

而他又比较厌烦计算,所以他还想知道最少经过多少次才能得到1。

例如,给出16,9:16-9+16-9+16-9-9-9+16-9-9=1,需要做10次加减法计算。

设计算法,输入两个不同的正整数,输出得到1的最少计算次数。

(如果无法得到1,则输出-1)。

(1)若输入两个不同的正整数a,b均为偶数,显然不可能得到1。

设x*a与y*b之差为“1”或“-1”,则对于正整数a,b经n=x+y-1次加减可得到1。

为了求n的最小值,令n从1开始递增,x在1——n中取值,y=n+1-x:检测d=x*a+y*b,若d=1或-1,则n=x+y-1为所求的最少次数。

(2)算法描述// 两数若干次加减结果为1的数学游戏#includevoid main(){long a,b,d,n,x,y;printf(" 请输入整数a,b: ");scanf("%ld,%ld",&a,&b);if(a%2==0 && b%2==0){ printf(" -1\n");return;}n=0;while(1){ n++;for(x=1;x<=n;x++){ y=n+1-x;d=x*a-y*b;if(d==1 || d==-1) // 满足加减结果为1{ printf(" n=%ld\n",n);return;}}}}请输入整数a,b: 2012,19961请输入整数a,b: 101,20136061-2 埃及分数式算法描述分母为整数分子为“1”的分数称埃及分数,试把真分数a/b 分解为若干个分母不为b 的埃及分数之和。

(1)寻找并输出小于a/b 的最大埃及分数1/c ;(2)若c>900000000,则退出;(3)若c ≤900000000,把差a/b-1/c 整理为分数a/b ,若a/b 为埃及分数,则输出后结束。

算法设计与分析习题答案1-6章

算法设计与分析习题答案1-6章

习题11.图论诞生于七桥问题。

出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。

七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,图1.7是这条河以及河上的两个岛和七座桥的草图。

请将该问题的数据模型抽象出来,并判断此问题是否有解。

七桥问题属于一笔画问题。

输入:一个起点 输出:相同的点 1, 一次步行2, 经过七座桥,且每次只经历过一次 3, 回到起点该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。

另一类是只有二个奇点的图形。

2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。

请用伪代码描述这个版本的欧几里德算法 1.r=m-n2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。

要求分别给出伪代码和C ++描述。

//采用分治法//对数组先进行快速排序 //在依次比较相邻的差 #include <iostream> using namespace std;int partions(int b[],int low,int high) {图1.7 七桥问题int prvotkey=b[low];b[0]=b[low];while (low<high){while (low<high&&b[high]>=prvotkey)--high;b[low]=b[high];while (low<high&&b[low]<=prvotkey)++low;b[high]=b[low];}b[low]=b[0];return low;}void qsort(int l[],int low,int high){int prvotloc;if(low<high){prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); //递归调用排序由low 到prvotloc-1qsort(l,prvotloc+1,high); //递归调用排序由 prvotloc+1到 high}}void quicksort(int l[],int n){qsort(l,1,n); //第一个作为枢轴,从第一个排到第n个}int main(){int a[11]={0,2,32,43,23,45,36,57,14,27,39};int value=0;//将最小差的值赋值给valuefor (int b=1;b<11;b++)cout<<a[b]<<' ';cout<<endl;quicksort(a,11);for(int i=0;i!=9;++i){if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) )value=a[i+1]-a[i];elsevalue=a[i+2]-a[i+1];}cout<<value<<endl;return 0;}4.设数组a[n]中的元素均不相等,设计算法找出a[n]中一个既不是最大也不是最小的元素,并说明最坏情况下的比较次数。

算法设计与分析智慧树知到课后章节答案2023年下天津大学

算法设计与分析智慧树知到课后章节答案2023年下天津大学

算法设计与分析智慧树知到课后章节答案2023年下天津大学天津大学第一章测试1.下列关于效率的说法正确的是()。

答案:提高程序效率的根本途径在于选择良好的设计方法,数据结构与算法;效率是一个性能要求,其目标应该在需求分析时给出;效率主要指处理机时间和存储器容量两个方面2.算法的时间复杂度取决于()。

答案:待处理数据的初态;问题的规模3.计算机算法指的是()。

答案:解决问题的有限运算序列4.归并排序法的时间复杂度和空间复杂度分别是()。

答案:O(nlog2n);O(n)5.将长度分别为m,n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。

()答案:错6.用渐进表示法分析算法复杂度的增长趋势。

()答案:对7.算法分析的两个主要方面是时间复杂度和空间复杂度的分析。

()答案:对8.某算法所需时间由以下方程表示,求出该算法时间复杂度()。

答案:O(nlog2n)9.下列代码的时间复杂度是()。

答案:O(log2N)10.下列算法为在数组A[0,...,n-1]中找出最大值和最小值的元素,其平均比较次数为()。

答案:3n/2-3/2第二章测试1.可用Master方法求解的递归方程的形式为()。

答案:T(n)=aT(n/b)+f(n) , a≥1, b>1, 为整数, f(n)>0.2.答案:对3.假定,, 递归方程的解是. ( )答案:对4.假设数组A包含n个不同的元素,需要从数组A中找出n/2个元素,要求所找的n/2个元素的中点元素也是数组A的中点元素。

针对该问题的任何算法需要的时间复杂度的下限必为。

( )答案:错5.使用Master方法求解递归方程的解为().答案:6.考虑包含n个二维坐标点的集合S,其中n为偶数,且所有坐标点中的均不相同。

一条竖直的直线若能把S集合分成左右两部分坐标点个数相同的子集合,则称直线L为集合S的一条分界线。

若给定集合S,则可在时间内找到这条分界线L。

( )答案:对7.答案:8.从n个数中找出前k个最小的元素并对所选择的前k个最小的元素进行排序。

算法设计与分析课后答案

算法设计与分析课后答案

5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:●如果d整除u和v, 那么d一定能整除u±v;●如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。

数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。

故gcd(m,n)=gcd(n,r)6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)并且这种交换处理只发生一次.7.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)gcd(5,8)习题1.21.(农夫过河)P—农夫W—狼G—山羊C—白菜2.(过桥问题)1,2,5,10---分别代表4个人, f—手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)算法Quadratic(a,b,c)//求方程ax^2+bx+c=0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息D←b*b-4*a*cIf D>0temp←2*ax1←(-b+sqrt(D))/tempx2←(-b-sqrt(D))/tempreturn x1,x2else if D=0 return –b/(2*a)else return “no real roots”else //a=0if b≠0 return –c/belse //a=b=0if c=0 return “no real numbers”else return “no real roots”5.描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法DectoBin(n)//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1...n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略) 对这个算法做尽可能多的改进.算法MinDistance(A[0..n-1])//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements习题1.31.考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表‖60,35,81,98,14,47‖排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表‖60,35,81,98,14,47‖排序的过程如下所示:b.该算法不稳定.比如对列表‖2,2*‖排序c.该算法不在位.额外空间for S and Count[]4.(古老的七桥问题)习题1.41.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度. a.删除数组的第i 个元素(1<=i<=n)b.删除有序数组的第i 个元素(依然有序) hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array ’s element(e.g., 0 for an array of positive numbers ) to mark the i th position is empty. (―lazy deletion ‖)第2章 习题2.17.对下列断言进行证明:(如果是错误的,请举例) a. 如果t(n )∈O(g(n),则g(n)∈Ω(t(n)) b.α>0时,Θ(αg(n))= Θ(g(n)) 解:a. 这个断言是正确的。

算法设计与分析课后习题

算法设计与分析课后习题

算法设计与分析课后习题(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第一章1. 算法分析题算法分析题1-1 求下列函数的渐进表达式(1). 3n^2 + 10n < 3n^2 + 10n^2 = 13n^2 = O(n^2)(2). n^2 / 10 + 2^n当n>5是,n^2 < 2 ^n所以,当n >= 1时,n^2/10 < 2 ^n故: n^2/10 + 2^n < 2 ^n + 2^n = 2*2^n = O(2^n)(3). 21 + 1/n < 21 + 1 = 22 = O(1)(4). log(n^3)=3log(n)=O(log(n))(5). 10log(3^n) = (10log3)n = O(n)算法分析题1-6(1)因为:f(n)=log(n^2) = 2log(n); g(n) = log(n) + 5所以:f(n)=Θ(log(n)+5) =Θ(g(n))(2)因为:log(n) < √n ; f(n) = 2log(n); g(n)= √n所以:f(n) = O(g(n))(3)因为:log(n) < n; f(n) = n; g(n) = log(n^2) = 2log(n)所以;f(n) = Ω(g(n))(4)因为:f(n) = nlogn +n; g(n) = logn所以:f(n) =Ω(g(n))(5)因为: f(n) = 10; g(n) = log(10)所以:f(n) =Θ(g(n))(6)因为: f(n)=log^2(n); g(n) = log(n)所以: f(n) ==Ω(g(n))(7)因为: f(n) = 2^n < 100*2^n; g(n)=100n^2; 2^n > n ^2所以: f(n) = Ω(g(n))(8)因为:f(n) = 2^n; g(n) = 3 ^n; 2 ^n < 3 ^n所以: f(n) = O(g(n))习题1-9 证明:如果一个算法在平均情况下的计算时间复杂性为Θ(f(n)),该算法在最坏情况下所需的计算时间为Ω(f(n)).分析与解答:因此,Tmax(N) = Ω(Tavg(N)) = Ω(Θ(f(n)))=Ω(f(n)).第二章算法分析题2-3 设a[0:n-1]是已经排好序的数组。

算法设计与分析第三章课后答案吕国英主编

算法设计与分析第三章课后答案吕国英主编

.2、#include<stdio.h>void main(){int a[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<stdio.h>void main(){int i,j,count,n;int a[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<stdio.h>void main(){int i,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<stdio.h>void main(){int i,j,count,n;int a[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。

算法设计与分析-课后习题集答案

算法设计与分析-课后习题集答案

第一章3. 最大公约数为1。

快1414倍。

程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环)8.(1)画线语句的执行次数为log n ⎡⎤⎢⎥。

(log )n O 。

(2)画线语句的执行次数为111(1)(21)16jnii j k n n n ===++=∑∑∑。

3()n O 。

(3)画线语句的执行次数为。

O 。

(4)当n 为奇数时画线语句的执行次数为(1)(1)4n n +-, 当n 为偶数时画线语句的执行次数为 (2)4n n +。

2()n O 。

10.(1) 当 1n ≥ 时,225825n n n -+≤,所以,可选 5c =,01n =。

对于0n n ≥,22()5825f n n n n =-+≤,所以,22582()-+=O n n n 。

(2) 当 8n ≥ 时,2222582524n n n n n -+≥-+≥,所以,可选 4c =,08n =。

对于0n n ≥,22()5824f n n n n =-+≥,所以,22582()-+=Ωn n n 。

(3) 由(1)、(2)可知,取14c =,25c =,08n =,当0n n ≥时,有22212582c n n n c n ≤-+≤,所以22582()-+=Θn n n 。

11. (1) 当3n ≥时,3log log n n n <<,所以()20log 21f n n n n =+<,3()log 2g n n n n =+>。

可选212c =,03n =。

对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。

(2) 当 4n ≥ 时,2log log n n n <<,所以 22()/log f n n n n =<,22()log g n n n n =≥。

可选 1c =,04n =。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2、#include<stdio.h>void main(){int a[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<stdio.h>void main(){int i,j,count,n;int a[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<stdio.h>void main(){int i,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<stdio.h>void main(){int i,j,count,n;int a[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 <stdio.h>void main(){int a[100],b[100],i,n,m,k=0,flag=0;printf("请输入洞的个数n:");scanf("%d",&n);printf("请输入要经过洞的个数m:");scanf("%d",&m);for(i=0;i<n;i++){a[i]=0;b[i]=1;}for(i=0;;i=(i+m)%n){if(a[(i+m)%n]==0)a[(i+m)%n]=1;elseif(a[(i+m)%n]==1)break;}for(i=0;i<n;i++){if(a[i]==0)k++;elseif(a[i]==1)flag++;}if(k>0){printf("\n兔子有幸免的机会,位置为:\n");for(i=0;i<n;i++)if(a[i]==0)printf("%d ",i);printf("\n");}if(flag==n)printf("兔子没有幸免的机会!\n");}12、有52张牌,使它们全部正面朝上,第一轮是从第2张开始,凡是2的倍数位置上的牌翻成正面朝下;第二轮从第3张牌开始,凡是3的倍数位置上的牌,正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;第三轮从第4张牌开始,凡是4的倍数位置上的牌按上面相同规则翻转,以此类推,知道翻的牌超过104张为止。

统计最后有几张牌正面朝上,以及它们的位置号。

#include<stdio.h>void main(){int a[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 <stdio.h>void main(){int a,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<stdio.h>void main(){int i,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<stdio.h>void main(){int A,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->X 2->Y 3->Z\n");}16、#include<stdio.h>void main(){int number;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);elseprintf("不能被4,7,9任一个整除\n");}17、#include<stdio.h>void main(){int a,b,c,d;printf("Please think of a number between 1 and 100\n");printf("your number divided by 3 has a remainder of\n");printf("Please Input a=");scanf("%d",&a);printf("your number divided by 4 has a remainder of\n");printf("Please Input b=");scanf("%d",&b);printf("your number divided by 7 has a remainder of\n");printf("Please Input c=");scanf("%d",&c);printf("let me think a moment ...\n");d=28*a+21*b+36*c;while (d>84)d=d-84;printf("你的数字是%d\n",d);}18、#include<stdio.h>void main(){int a,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<stdio.h>#include<string.h>void main(){char str[100];int sum=0,i,n=0;printf("请输入十六进制数:");gets(str);n=strlen(str);for(i=0;i<n;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;i<n-1;i++)sum=(sum+str[i])*16;sum=sum+str[i];printf("十进制数为:%d\n",sum);}20、#include<stdio.h>void main(){int a,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=%d b=%d c=%d d=%d e=%d f=%d g=%d h=%d i=%d\n",a,b,c,d,e,f,g,h,i);}}21、#include<stdio.h>#include<math.h>void main(){int a,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<stdio.h>void main(){int number,w1,w2,w3,w4,w5;printf("请输入一个五位以内的正整数:");scanf("%d",&number);if(number/10==0){printf("它是一个一位数!\n");printf("%d\n",number);printf("正序逆序相同!\n");}elseif(number/100==0){printf("它是一个两位数!\n");printf("正序为:%d %d\n",number/10,number%10);printf("逆序为:%d %d\n",number%10,number/10);}elseif(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);}elseif(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);}elseif(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);}elseprintf("error!");}27、#include<stdio.h>void main(){int month;printf("请输入月份month=");scanf("%d",&month);switch(month){case 1:printf("January\n");break;case 2:printf("February\n");break;case 3:printf("March\n");break;case 4:printf("April\n");break;case 5:printf("May\n");break;case 6:printf("June\n");break;case 7:printf("July\n");break;case 8:printf("August\n");break;case 9:printf("September\n");break;case 10:printf("October\n");break;case 11:printf("November\n");break;case 12:printf("December\n");break;}。

相关文档
最新文档