折纸游戏

原创 2015年07月09日 16:34:26

一张纸对折n次,凹痕为0,凸痕为1,求对折n次对应的01串

方法1 生成满二叉树法

string fold(int n) {
	if (n <= 0) return "";
	struct TreeNode {
		char val;
		TreeNode * left;
		TreeNode * right;
		TreeNode(char c) :val(c), left(nullptr), right(nullptr) {}
	};
	function<void(TreeNode*, string&)> inOrder = [&](TreeNode* root, string &s) {
		if (!root) return;
		inOrder(root->left, s);
		s.push_back(root->val);
		inOrder(root->right, s);
	};
	queue<TreeNode*> q;
	auto root = new TreeNode('0');
	q.push(root);
	for (int i = 1; i < n; ++i) {
		for (int j = 0, sz = q.size(); j < sz; ++j) {
			auto node = q.front(); q.pop();
			node->left = new TreeNode('0');
			node->right = new TreeNode('1');
			q.push(node->left);
			q.push(node->right);
		}
	}
	string s;
	inOrder(root, s);
	return s;
}

方法2:直接生成

void help(string &s, int l, int r, char c) {
	if (l > r) return;
	int m = l + ((r - l) >> 1);
	s[m] = c;
	help(s, l, m - 1, '0');
	help(s, m + 1, r, '1');
}
string fold(int n) {
	if (n < 1) return "";
	int m = pow(2, n) - 1;
	string s(m, 'a');
	help(s, 0, s.size() - 1, '0');
	return s;
}

方法3:流式输出

递归函数定义:折n次,第一次是c痕(0为凹痕,1为凸痕)的所有折痕

string s;
void fold(int n, char c) {
	if (n < 1) return;
	fold(n - 1, '0');
	s.push_back(c);
	fold(n - 1, '1');
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【Codeforces Round 263 (Div 2)E】【坐标映射 脑洞】Appleman and a Sheet of Paper 折纸游戏 区间查询

Appleman and a Sheet of Paper time limit per test 2 seconds memory limit per test 256 me...

HDOJ 5004 - KAMI 神之折纸 神搜索...

http://blog.csdn.net/alpc_neverfarewell/article/details/39273217 Program:
  • kk303
  • kk303
  • 2014年09月23日 20:34
  • 759

关于规划的寓言故事:把一张纸折叠51次 ------意义不在折纸,而在规划,重在规划!!!

想象一下,你手里有一张足够大的白纸。现在,你的任务是,把它折叠51次。那么,它有多高?   一个冰箱?一层楼?或者一栋摩天大厦那么高?不是,差太多了,这个厚度超过了地球和太阳之间的距离。 ...

纯CSS实现3D折纸效果

今天继续来看一个纯CSS实现的3D折纸效果,效果如下图。基于上一个效果《纯CSS实现图像3D悬停效果》而开发的,没有看过的童鞋欢迎移步。 本效果原理如下图所示,分别用.img,.img:before和...
  • whqet
  • whqet
  • 2014年02月17日 20:27
  • 3826

MIT折纸算法

折纸算法
  • xavier0
  • xavier0
  • 2016年03月26日 13:01
  • 630

折纸问题

折纸问题

NEFU 983 vd折纸

vd折纸 Num : 5 Time Limit : 1000ms Memory Limit : 65536K ...

Origami Airplanes Folds In 3D:非常给力的3D折纸应用

折纸起源于中国,在日本发展成为一种艺术。由于折纸能锻炼人的手、眼和大脑综合协调能力,所以很受欢迎,尤其对妹纸们来说,给心爱的他折点千纸鹤神马的更是觉得意义非凡。而对男童鞋来说,折纸飞机也是儿时乐趣之一...

二叉树中序遍历变型——折纸问题

题目描述 请把纸条竖着放在桌子上,然后从纸条的下边向上方对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的方向指向纸条正面的折痕叫做“上”折痕。如...

全新的内存分配算法(折纸算法)

全新的内存分配算法,这个算法适合可变长对象,并且经常要扩展的内存块的分配,比如字符串。是空间换时间的算法。 想象一张长长的纸条,不断的对折它,就可以把纸条分成一格一格,而且每次对折格子小一半,数量多一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:折纸游戏
举报原因:
原因补充:

(最多只允许输入30个字)