1 / 130
文档名称:

《算法设计与分析实用教程》源代码.doc

格式:doc   大小:849KB   页数:130页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

《算法设计与分析实用教程》源代码.doc

上传人:marry201208 2018/6/30 文件大小:849 KB

下载得到文件列表

《算法设计与分析实用教程》源代码.doc

相关文档

文档介绍

文档介绍:《算法设计与分析实用教程》源代码
()
第 1 章算法及其复杂性分析
算法及其描述
// “辗转相除”求最大公约数
#include<>
void main()
{ long a,b,c,r;
printf(" 请输入整数a,b:");
scanf("%ld,%ld",&a,&b);
if(a<b)
{ c=a;a=b;b=c;} // 必要时交换a,b,确保a>b
r=a%b;
while(r!=0)
{ a=b;b=r; // 实施“辗转相除”
r=a%b;
}
printf(" 最大公约数为:%ld",b);
}
// 喝汽水
#include<>
void main()
{ long m,t,x,y;
printf(" 请输入m:"); scanf("%ld",&m);
x=m/20; // 分x个大组,每组买13瓶汽水,借7瓶
t=m-20*x; // 剩下大组外的t人
y=t/3; // 剩下t人分y个小组,每组买2瓶汽水,借1瓶
t=m-20*x-3*y; // 剩下大小组外的t人,每人花1元喝1瓶
printf(" 喝%ld瓶汽水,需%.2f元。\n",m,(13*x+2*y)*+t);
}

算法设计与分析实例
// 求a,b的最大公约数的枚举设计
#include<>
void main()
{ long a,b,c;
printf("请输入正整数a,b: ");
scanf("%ld,%ld",&a,&b); // 输入正整数a,b
if(a<b)
{c=a;a=b;b=c;} // 交换a,b,确保a>b
for(c=b;c>=1;c--) // c枚举循环
if(a%c==0 && b%c==0) break; // 按公约数定义判定
printf("(%ld,%ld)=%ld\n",a,b,c); // 输出求解结果
}
// 计算n!(n≤12)
#include<>
void main()
{ int k,n;long t;
printf(" 请输入正整数n(n≤12): ");
scanf("%d",&n); // 输入n
t=1;
for(k=1;k<=n;k++)
t*=k; // 循环累乘
printf(" %d!=%ld\n",n,t); // 输出n!
}
// 计算n!(n<10000)
#include<>
#include<>
void main()
{ int j,k,m,n,a[40000];
long g,t;double s;
printf(" 请输入正整数n(n<10000): ");
scanf("%d",&n); // 输入n
s=0;
for(k=2;k<=n;k++)
s+=log10(k); // 对数累加确定n!的位数m
m=(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("\n 共%d位。\n",m);
}
// 求m个1能被个位数字不是5的奇数n整除
#include<>
void main()
{ long m,n,a,c;
printf(" 请输入个位数字不是5的奇数: ");
scanf("%d",&n); // 个位数字不是5的奇数n
c=1;m=1; // 变量c与m赋初值
while(c!=0) // 循环模拟整数除法竖式计算
{ a=c*10+1;
c=a%n;
m++; // 每试商一位m增1
}
printf(" m=%d\n",m); // 输出求解结果
}

算法与程序设计

// 圈号对称方阵
#include <>
#include <>
void main()
{int i,j,n,a[30][30];
printf(" 请确定