(陈慧南 第3版)算法设计与分析——第1章课后习题答案.pdf_第1页
(陈慧南 第3版)算法设计与分析——第1章课后习题答案.pdf_第2页
(陈慧南 第3版)算法设计与分析——第1章课后习题答案.pdf_第3页
(陈慧南 第3版)算法设计与分析——第1章课后习题答案.pdf_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章课后习题 姓名 赵文浩 学号 16111204082 班级 2016 级计算机科学与技术 1 4 证明等式 gcd m n gcd n mod m m 对每对正整数 m 和 n m 0 都成立 证明 我们不妨记 x gcd m n y gcd n mod m m 因此有 x m x n y n mod m y m 对于 n 可以用 m 表示为 n k m n mod m 且 y n mod m 因此结合 可知 y n 结合 和 可知 y m y n 因此 y 一定是 m 和 n 的一个公约数 又因为 x 是 m 和 n 的最大公约数 因此有 y x 结合 y x 可知 x y 因此 gcd m n gcd n mod m m 证毕 1 12 试用归纳法证明程序 1 7 的排列产生器算法的正确性 证明 主函数中 程序调用 perm a 0 n 实现排列产生器 当 n 1 时 即数组 a 中仅包含一个元素 函数内 k 0 与 n 1 0 相等 因此函 数内仅执行 if k n 1 下的 for 语句块 且只执行一次 即将 a 数组中的一个元 素输出 实现了对一个元素的全排列 因此当 n 1 时 程序是显然正确的 我们假设程序对于 n k 1 仍能够满足条件 将 k 1 个元素的全排列产生并输出 当 n k 时 程序执行 else 下语句块的内容 首先执行 swap a 0 a 0 然后执 行 Perm a 1 n 根据假设 可知 该语句能够产生以 a 0 为第一个元素 余下 k 1 个元素的全排列 然后再次执行 swap a 0 a 0 并进行下一次循环 此时 i 1 即在本次循环中 先执行 swap a 0 a 1 将第二个元素与第一个元素互换 下面执行 Perm a 1 n 根据假设 可知 该语句产生以 a 1 为第一个元素 余下 k 1 个元素的全排列 以此类推 该循环每一次将各个元素调到首位 通过执行语句 Perm a 1 n 以及 基于假设 能够实现产生 k 个元素的全排列 因此 n k 时 程序仍满足条件 综上所述 该排列器产生算法是正确的 证毕 1 13 写一个递归算法和一个迭代算法计算二项式系数 include int Coef recursive int n int m 递归算法 int Coef iteration int n int m 迭代算法 int Factorial int n 计算 n 的阶乘 int main int n m while n 0 m 0 n m printf 请输入合法的 m 和 n 的值 n 在前 m 在后 n scanf d d 注意 n 和 m 输入次序 printf 采用迭代算法得到的结果为 d n Coef iteration n m printf 采用递归算法得到的结果为 d n Coef recursive n m return 0 int Factorial int n 计算 n 的阶乘 if n 1 n 0 注意基本情况下规定 0 和 1 的阶乘为 1 return 1 return n Factorial n 1 int Coef iteration int n int m 迭代算法 return Factorial n Factorial m Factorial n m int Coef recursive int n int m 递归算法 if n 1 if n 0 return 0 基础情况 return Coef recursive n 1 m Coef recursive n 1 m 1 递归部分 1 14 给定一个字符串 s 和一个字符 x 编写递归算法实现以下功能 1 检查 x 是否出现在 s 中 2 计算 x 在 s 中出现的次数 3 删除 s 中所有 x include int GetNum char s char x void DeleteChar char s char x void DeleteFirstChar char s 辅助函数 用于删除字符串 s 的首位字符元素 int main char s 100 char x int num 0 printf 请输入字符串 s n scanf s s getchar printf 请输入字符 x n scanf c num GetNum s x if num 0 printf 字符 c 未在字符串 s 中出现 n x else printf 字符 c 在字符串 s 中出现 且出现 d 次 n x num DeleteFirstChar s 测试能否实现首位字符元素的删除 DeleteChar s x printf 在字符串 s 中删除字符 c 后为 s n x s return 0 int GetNum char s char x 统计字符 x 在字符串 s 中出现的次数 int count 0 if s if s x count count GetNum s 1 x return count void DeleteChar char s char x 在字符串 s 中删除所有字符 x int flag 0 用于判断首位元素是否被删除的标志 if s if s x flag 1 DeleteFirstChar s if flag 1 若首位元素被删除 那么执行 DeleteChar s x 继续检查第一个 字符是否为 x 并做相应操作 DeleteChar s x else DeleteChar s 1 x 若首位元素未被删除 那么执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论