/* cpaps赌博游戏 说明: 一个简单的赌博游戏,游戏规则如下:玩家掷两个骰子,点数为1到6,如果第一次点数和为7或11,则玩家胜,如果点数和为2、3 或12,则玩家输,如果和 为其它点数,则记录第一次的点数和,然后…
分类:经典算法问题
【约瑟夫问题】
/* 约瑟夫问题 说明: 据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中 , 39个犹太人决定宁愿死也不要被敌人到 , 于是决定了一个…
【排列组合】
/* 排列组合 说明: 将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:123、132、213、 231、312、321。 解法: 可以使用递回将问题切割为较小的单…
【格雷码】
/* 格雷码 说明: Gray Code是一个数列集合 ,每个数使用二进位来表示 ,假设使用n位元来表示每个数好了 ,任两个数之间只有一个位元值不同, 例如以下为3位元的Gray Code: 000 001 011 01…
【可能产生的集合】
/* 无字典顺序集合 说明: 给定一组数字或符号 , 产生所有可能的集合(包括空集合 ), 例如给定1 2 3 , 则可能的集合为 : {}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。 …
【m元素集合的n个元素子集】
/* m元素集合的n个元素子集 说明: 假设有个集合拥有m个元素,任意的从集合中取出n个元素,则这n个元素所形成的可能子集有那些? 解法: 假设有5个元素的集点,取出3个元素的可能子集如下: {1 2 3} 、{1 2 …
【数字拆解】
/* 数字拆解 说明: 这个题目来自于 数字拆解,我们将之改为C语言的版本,并加上说明。 题目是这样的: 3 = 2 + 1 = 1 + 1 + 1 所以有三种拆法 4 = 3 + 1 = 2 + 2 = 2 + 1 +…
【得分排行】
/* 得分排行 */ #include<stdio.h> #include<stdlib.h> #define MAX 100 #define MIN 0 int main(void) { int…
【选择 插入 冒泡排序】
/* 三种排序 选择排序 插入排序 冒泡排序 思考:只有输入数字switch正确循环,输入其他则不停循环 ,为何 说明: 选择排序(Selection sort ) 、插入排序(Insertion sort)与气泡排序(…
【改良插入排序】
/* 说明: 插入排序法由未排序的后半部分前端取出一个值,插入已排序前半部分的适当位置,概念简单但速度不快。 排序要加快的基本原则之一,是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序…
【改良的选择排序 】
/* 改良的选择排序,需要堆积树 */ #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX 10 #de…
【快速排序三】
/* 快速排序法三 说明: 之前说过轴的选择是快速排序法的效率关键之一 , 在这边的快速排序法的轴选择方式更加快了快速排序法的效率,它是来自演算法 名书 Introduction toAlgo…