基于Josephus问题的C语言教学设计分析
2014-07-12刘东良
滁州学院学报 2014年2期
刘东良
C语言教学案例较多,内容涉及较多学科内容,无疑增大了初学者的学习认知负担。为满足C语言的教学需要,以一例"Josephus问题"贯通全部教学内容的方式设计案例。通过Josephus问题的多种变形描述,使其内容覆盖标准C语言的全部知识单元,这样设计能大大的减轻C语言学习者的学习难度,无需费时费力在求解问题本身的理解上,从而使学生能更好地理解、掌握C语言基础知识,一例贯通,举一反三。同时,增加无穷的乐趣和探索精神;加深学习者对C语言知识深度理解和灵活掌握;尽早尽快掌握C语言内容和编程技能,能够进行简单的应用程序设计。
1 Josephus问题和求解
据说古代罗马军队中有一种惩罚习惯:如一个连队因怯懦、反叛或其他理由受到惩罚时,采用"见十去一(decimatio)"的办法进行处罚,即将队伍中凡是站在10的倍数位置上的人处死。有关的事例可以追溯到公元前5世纪。类似的方法在古代的民事战争中被使用,但不一定是"见十去一",也有其他的淘汰比率,如"见二十去一(vicesimatio)"、"见百去一(centesimatio)"等等。Josephus问题就是从此演变而来。
Josephus问题的基本形式是将k个子排成一圈,在这个圈中以某子为起点,m个m个数子,将每次数到的第m子去掉,直到去掉k-n子为止。问保留下来的n子在原来的圈中应排在哪些位置上。
Josephus问题的求解是数学问题,用计算机语言设计程序求解各种约瑟夫及其变形问题具有现代意义和价值。苏格兰数学家Peter Guthrie Tait给出这个问题的通解后,Josephus'Problem,又被称为 Tait's Problem。

这就是泰特的算法。……
登录APP查看全文
