资源描述:
《《算法设计与分析实用教程》源代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《算法设计与分析实用教程》源代码(所有源代码可在VC6.0环境下测试通过)第1章算法及其复杂性分析1.1算法及其描述//“辗转相除”求最大公约数#includevoidmain(){longa,b,c,r;printf("请输入整数a,b:");scanf("%ld,%ld",&a,&b);if(abr=a%b;while(r!=0){a=b;b=r;//实施“辗转相除”r=a%b;}printf("最大公约数为:%ld",b);}//喝汽水#include
2、voidmain(){longm,t,x,y;printf("请输入m:");scanf("%ld",&m);x=m/20;//分x个大组,每组买13瓶汽水,借7瓶t=m-20*x;//剩下大组外的t人130y=t/3;//剩下t人分y个小组,每组买2瓶汽水,借1瓶t=m-20*x-3*y;//剩下大小组外的t人,每人花1元喝1瓶printf("喝%ld瓶汽水,需%.2f元。",m,(13*x+2*y)*1.40+t);}1.3算法设计与分析实例//求a,b的最大公约数的枚举设计#includevo
3、idmain(){longa,b,c;printf("请输入正整数a,b:");scanf("%ld,%ld",&a,&b);//输入正整数a,bif(abfor(c=b;c>=1;c--)//c枚举循环if(a%c==0&&b%c==0)break;//按公约数定义判定printf("(%ld,%ld)=%ld",a,b,c);//输出求解结果}//计算n!(n≤12)#includevoidmain(){intk,n;longt;printf("请输入正整
4、数n(n≤12):");scanf("%d",&n);//输入nt=1;for(k=1;k<=n;k++)t*=k;//循环累乘printf("%d!=%ld",n,t);//输出n!}//计算n!(n<10000)130#include#includevoidmain(){intj,k,m,n,a[40000];longg,t;doubles;printf("请输入正整数n(n<10000):");scanf("%d",&n);//输入ns=0;for(k=2;k<=n;k++)s+=log10(k
5、);//对数累加确定n!的位数mm=(int)s+1;for(k=1;k<=m;k++)a[k]=0;//数组清零a[1]=1;g=0;for(k=2;k<=n;k++)for(j=1;j<=m;j++){t=a[j]*k+g;//数组累乘并进位a[j]=t%10;g=t/10;}printf("%d!=",n);for(j=m;j>=1;j--)printf("%d",a[j]);//输出n!的各位数printf("共%d位。",m);}//求m个1能被个位数字不是5的奇数n整除#includevoidmain
6、(){longm,n,a,c;printf("请输入个位数字不是5的奇数:");scanf("%d",&n);//个位数字不是5的奇数nc=1;m=1;//变量c与m赋初值while(c!=0)//循环模拟整数除法竖式计算{a=c*10+1;c=a%n;m++;//每试商一位m增1}130printf("m=%d",m);//输出求解结果}1.4算法与程序设计//圈号对称方阵#include#includevoidmain(){inti,j,n,a[30][30];printf("请确定方阵阶数n:"
7、);scanf("%d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i+j<=n+1&&i<=j)a[i][j]=(n+1)/2-i+1;//方阵上部元素赋值if(i+jj)a[i][j]=(n+1)/2-j+1;//方阵左部元素赋值if(i+j>=n+1&&i>=j)a[i][j]=i-n/2;//方阵下部元素赋值if(i+j>n+1&&i8、{for(j=1;j<=n;j++)//输出对称方阵printf("%3d",a[i][j]);printf("");}}//求n个整数的最大公约数#includevoi