摘要:
题目描述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。思路1. 想了半天, 写不出递归函数, 倒是基于堆栈的循环方法简单的多代码#include #include #include #include #include using namespace std;class Node {public: char data; Node *left, *right; Node(char... 阅读全文
摘要:
题目描述: 二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。思路1. 根据数组构建二叉搜索树代码#include #include using namespace std;class Node {public: . 阅读全文
摘要:
题目描述:在组合数学中,我们学过排列数。从n个不同元素中取出m(m#include using namespace std;int five[20];void init() { int tmp = 2, i = 0; while(tmp = five[i]; i ++) { cnt += x/five[i]; } return cnt;}int main() { int n, m; init(); while(scanf("%d%d", &n, &m) != EOF && n != 0) { int cnt = 0; ... 阅读全文
摘要:
题目描述:给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。思路1. 题目考察的是 GCD代码#include #include #include using namespace std;int numbers[700];int gcd(int x, int y) { if(x == 1 || y == 1) return 1; if(x == y) return x; if(x < y) swap(x, y); if(x&1 == 1) { if(y&1 == 1) ... 阅读全文
摘要:
题目描述:Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as:hde ll rlowoThat is, the characters must be printed in the original order, starting top-down from the left vertical line with n1 characters, 阅读全文
摘要:
题目描述:玛雅人有一种密码,如果字符串中出现连续的2012四个数字就能解开密码。给一个长度为N的字符串,(2=#include #include #include #include #include using namespace std;string str;int N;bool visited[1600000];bool match(const string &str1) { for(int i = 0; i > str; memset(visited, 0, sizeof(visited)); deque record; record.pu... 阅读全文
摘要:
题目描述:一个数的序列bi,当b1 #include using namespace std;int dp[1001];int val[1001];int n;int main() { while(scanf("%d", &n) != EOF ) { for(int i = 0; i = val[i]) continue; dp[i] = max(dp[i], dp[j]+val[i]); } } int resval = 0; for(int i = 0; i < n; i ++... 阅读全文
摘要:
题目描述: 对于一副扑克牌,我们有多种不同的洗牌方式。一种方法是从中间某个位置分成两半,然后相交换,我们称之为移位(shift)。比如原来的次序是123456,从第4个位置交换,结果就是561234。这个方式其实就是数组的循环移位,为了多次进行这个操作,必须使用一种尽可能快的方法来编程实现。在本题目中,还引入另外一种洗牌方式,就是把前一半(如果总数是奇数,就是(n-1)/2)牌翻转过来,这种操作称之为翻转(flip)。在前面shift操作的结果上进行flip,结果就是165234。当然,如果是实际的扑克牌,直接翻转会造成正反面混在一起的,我们就不管那么多了。 给定n张牌,初始次序为从1到n,经 阅读全文
摘要:
题目描述:给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此F(10)=3。输入N,求F(N)的值,1=<N<=10^100(10的100次方)若F(N)很大,则求F(N)mod 20123 的值。思路1. 剑指 offer 例题.2. 这题需要对数组求摸, 就懒得做了 阅读全文
摘要:
题目描述:给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品。思路1. 朴素背包问题2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总重量 (2) 对载重量较小的船计算dp3. 一维 dp, dp[i] 表示总物品重量为 i 时的最大价值, 因此 dp[i] 是不连续的, 统计结果时需要遍历 dp. 而二维 dp[][] 则可以填满矩阵代码 未通过九度测试#include #include #include using namespace std;int n, c1, c2;int wet[200];int dp[10000];int 阅读全文
摘要:
Leetcode 原题.这里 N 最大会取到 13, TLE 了代码#include #include using namespace std;bool chess[15][15];int n;int cnt;void dfs(int depth) { if(depth == n) { cnt ++; return; } for(int i = 0; i = 0; j --) { if(chess[j][i]) { qualify = false; break; ... 阅读全文
摘要:
题目描述:给定一个n*n的矩阵,求该矩阵的k次幂,即P^k思路1. 和求解整数幂的思路相同, 使用分治策略, 代码的框架是int pow(a, b) { c = pow(a, b/2) c*= c; if(b 为奇数) c *= a; return c}2. 这道题求的是矩阵, 上面的框架不太好用, 毕竟返回一个矩阵是有点不靠谱. 既然显式的返回矩阵不行, 那就玩个把戏, 隐式返回.将矩阵设置为全局变量, 使得递归函数里对矩阵的操作全局有效, 就不需要显式返回矩阵了3. 尝试仅使用两个矩阵得出结果, 但失败了, 计算矩阵乘法, 至少需要三个矩阵的空间吧代码#include #in... 阅读全文