折纸游戏

原创 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');
}


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

【拓扑题】神奇的折纸

发挥想象,方法多样!注意:只能沿直线剪,切每一剪都只能在单层纸面上,不能折叠成两层一起剪~提示:观察到图中纸片的颜色深度不一样了吗、?...
  • github_38885296
  • github_38885296
  • 2017年09月16日 14:27
  • 1604

折纸问题(规律题)(map的使用)

题目描述 请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如...
  • You_are_my_dream
  • You_are_my_dream
  • 2017年02月03日 20:58
  • 312

纯CSS实现3D折纸效果

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

折纸问题 。。。

问题和讨论 见牛客网 https://www.nowcoder.com/questionTerminal/430180b66a7547e1963b69b1d0efbd3c问题描述请把纸条竖着放在桌⼦...
  • qq_26437925
  • qq_26437925
  • 2016年12月14日 14:31
  • 391

MIT折纸算法

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

培训笔记—工作团队之团队工作

昨天参加了一个《工作团队之团队工作》的培训。通过几个很有意思的小游戏来说明团队成功的关键因素。游戏一:叠牌游戏目的:说明团队成功关键要素之分工/合作游戏说明:1. 将三副扑克牌混在一起打乱,然后和其他...
  • tryanderror
  • tryanderror
  • 2010年08月23日 00:11
  • 3074

折纸问题

请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边...
  • toroo_zheng
  • toroo_zheng
  • 2016年02月04日 14:11
  • 821

任意模型的折纸效果 Folding effect

Vimeo: https://vimeo.com/129632640 Python实现,Arnold渲染。 最初是看到有人做的一个展开汽车的一个,感觉很有趣,正好BTC有位童鞋需要,于是自己也做了...
  • cuckon
  • cuckon
  • 2015年06月03日 21:03
  • 2735

折纸问题 C++实现

题目描述: 把纸条竖着放在桌面上,然后从纸条的下边向上对折,压出折痕后再展开。如果每次都从下边向上对折,对折N次。 我们规定,对于每条折痕,如果突起的方向指向纸条的背面,那么这条折痕叫做“下”折痕 ;...
  • friendbkf
  • friendbkf
  • 2015年11月28日 23:00
  • 928

数据结构与算法分析笔记与总结(java实现)--二叉树7:折纸练习题

数据结构与算法分析笔记与总结(java实现)--二叉树7:折纸练习题
  • qq_27703417
  • qq_27703417
  • 2017年02月15日 17:32
  • 248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:折纸游戏
举报原因:
原因补充:

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