《计算机常用算法与程序设计案例教程》习题解答.docx
- 文档编号:2917082
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:96
- 大小:143.48KB
《计算机常用算法与程序设计案例教程》习题解答.docx
《《计算机常用算法与程序设计案例教程》习题解答.docx》由会员分享,可在线阅读,更多相关《《计算机常用算法与程序设计案例教程》习题解答.docx(96页珍藏版)》请在冰豆网上搜索。
《计算机常用算法与程序设计案例教程》习题解答
《计算机常用算法与程序设计案例教程》
习题解答提要
习题1
1-1分数分解算法描述
把真分数a/b分解为若干个分母为整数分子为“1”的埃及分数之和:
(1)寻找并输出小于a/b的最大埃及分数1/c;
(2)若c>900000000,则退出;
(3)若c≤900000000,把差a/b-1/c整理为分数a/b,若a/b为埃及分数,则输出后结束。
(4)若a/b不为埃及分数,则继续
(1)、
(2)、(3)。
试描述以上算法。
解:
设
(这里int(x)表示取正数x的整数),注意到
,有
算法描述:
令c=d+1,则
input(a,b)
while
(1)
{c=int(b/a)+1;
if(c>900000000)return;
else
{print(1/c+);
a=a*c-b;
b=b*c;//a,b迭代,为选择下一个分母作准备
if(a==1)
{print(1/b);return;}
}
}
1-2求出以下程序段所代表算法的时间复杂度
(1)m=0;
for(k=1;k<=n;k++)
for(j=k;j>=1;j--)
m=m+j;
解:
因s=1+2+…+n=n(n+1)/2
时间复杂度为O(n2)。
(2)m=0;
for(k=1;k<=n;k++)
for(j=1;j<=k/2;j++)
m=m+j;
解:
设n=2u+1,语句m=m+1的执行频数为
s=1+1+2+2+3+3+…+u+u=u(u+1)=(n−1)(n+1)/4
设n=2u,语句m=m+1的执行频数为
s=1+1+2+2+3+3+…+u=u2=n2/4
时间复杂度为O(n2)。
(3)t=1;m=0;
for(k=1;k<=n;k++)
{t=t*k;
for(j=1;j<=k*t;j++)
m=m+j;
}
解:
因s=1+2×2!
+3×3!
+…+n×n!
=(n+1)!
−1
时间复杂度为O((n+1)!
).
(4)for(a=1;a<=n;a++)
{s=0;
for(b=a*100−1;b>=a*100−99;b−=2)
{for(x=0,k=1;k<=sqrt(b);k+=2)
if(b%k==0)
{x=1;break;}
s=s+x;
}
if(s==50)
printf("%ld\n",a);break;}
}
解:
因a循环n次;对每一个a,b循环50次;对每一个b,k循环
次。
因而k循环体的执行次数s满足
时间复杂度为O(
)。
1-3若p(n)是n的多项式,证明:
O(log(p(n)))=O(logn)。
证:
设m为正整数,p(n)=a1×nm+a2×nm-1+…+am×n,
取常数c>ma1+(m-1)a2+…+am,则
log(p(n))=ma1×logn+(m-1)a2×logn+…=(ma1+(m-1)a2+…)×logn
因而有O(log(p(n)))=O(logn)。 1-4构建对称方阵 观察图1-5所示的7阶对称方阵: 图1-57阶对称方阵 试构造并输出以上n阶对称方阵。 解: 这是一道培养与锻炼我们的观察能力与归纳能力的案例,一个一个元素枚举赋值显然行不通,必须全局着眼,分区域归纳其构造特点,分区域枚举赋值。 (1)设计要点 设方阵中元素的行号为i,列号为j。 可知主对角线: i=j;次对角线: i+j=n+1。 两对角线赋值“0”。 按两条对角线把方阵分成上部、左部、右部与下部4个区,如图1-6所示。 图1-6对角线分成的4个区 上部按行号i赋值;下部按行号函数n+1-i赋值。 左部按列号j赋值;右部按列号函数n+1-j赋值。 (2)程序实现 #include voidmain() {inti,j,n,a[30][30]; printf("请确定方阵阶数n: "); scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) {if(i==j||i+j==n+1) a[i][j]=0;//方阵对角线元素赋值 if(i+j a[i][j]=i;//方阵上部元素赋值 if(i+j a[i][j]=j;//方阵左部元素赋值 if(i+j>n+1&&i>j) a[i][j]=n+1-i;//方阵下部元素赋值 if(i+j>n+1&&i a[i][j]=n+1-j;//方阵右部元素赋值 } printf("%d阶对称方阵为: \n",n); for(i=1;i<=n;i++) {for(j=1;j<=n;j++)//输出对称方阵 printf("%3d",a[i][j]); printf("\n"); } } 1-5据例1-2的算法,写出求解n个“1”组成的整数能被2011整除的程序。 修改程序,求出n至少为多大时,n个“1”组成的整数能被2013整除? 解: 程序为 #include voidmain() {inta,c,p,n; p=2011; c=1111;n=4;//变量c与n赋初值 while(c! =0)//循环模拟整数竖式除法 {a=c*10+1; c=a%p; n=n+1;//每试商一位n增1 } printf("由%d个1组成的整数能被%d整除。 \n",n,p); } 习题2 2-1解不等式 设n为正整数,解不等式 解: 上下限一般为键盘输入的a,b。 //解不等式: a<1+1/(1+1/2)+...+1/(1+1/2+...+1/n) #include #include voidmain() {longa,b,c,d,i; doublets,s; printf("请输入a,b: "); scanf("%d,%d",&a,&b); i=0;ts=0;s=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机常用算法与程序设计案例教程 计算机 常用 算法 程序设计 案例 教程 习题 解答