
算法分析与设计(课程)
s0i1
s0i1seed
展开
-
算法1-1: 统计数字问题
(1)、问题描述一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。(2)、算法设计给定表示书的总页码的10 进制整数n (1≤n≤10 ) 。编程计算书的全部页码中分别用到多少次数字...原创 2019-08-15 20:00:51 · 1518 阅读 · 0 评论 -
例2-4 全排列问题
#include <iostream>using namespace std;void perm(char s[], int k, int m) //从k到m进行全排列{ if (k == m) { for (int i = 0; i <= m; i++) { cout << s[i]; } cout <<...原创 2019-08-16 19:29:57 · 344 阅读 · 0 评论 -
例2-5 整数划分问题;例2-6汉诺塔问题
整数划分问题n=m1+m2+...+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,...,mi}为n的一个划分。 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m); 举个例子,当n=5时我们可以获得以下这几种划分(注意,例子中m...原创 2019-08-16 20:46:57 · 391 阅读 · 0 评论 -
二分搜索(折半查找)
时间复杂度,最坏情况:O(logn)代码实现:#include <iostream>using namespace std;template<class Type>int binarySearch(Type a[],Type x,int n) //x为要寻找的字符,n为数组长度。找到时返回在数组中的下标,找不到返回-1{ int high, low...原创 2019-08-17 11:55:13 · 232 阅读 · 0 评论 -
2.6 棋盘覆盖
四种情况的骨牌 基本原理是将2^k * 2^k的棋盘分成四块2^(k - 1) * 2^(k - 1)的子棋盘,特殊方格一定在其中的一个子棋盘中,如果特殊方格在某一个子棋盘中,继续递归处理这个子棋盘,直到这个子棋盘中只有一个方格为止如果特殊方格不在某一个子棋盘中,将这个子棋盘中的相应的位置设为骨牌号,将这个...原创 2019-08-18 15:52:26 · 304 阅读 · 0 评论 -
不使用四则运算实现加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。想法:使用位运算去模拟,那么下一步就是怎么模拟。二进制的按位相加实际等效于异或。 (异或,相同为0,相异为1;1与1异或为0,相当于产生了进位,但实际上对整个数进行异或时不会有进位的效果,00和10的情况就完全相当于加法的操作) 二进制的每位的进位计算等效于按位与,然后左移。(按位与,相当于把上一步1异...原创 2019-09-21 18:54:12 · 535 阅读 · 0 评论 -
左移右移(位运算)
实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多i为0x80000000,也就是2进制的100000...0000(共31位,有一个1个符号位),符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出。 如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0...原创 2019-09-21 18:04:05 · 472 阅读 · 0 评论