FZU 1064 教授的测试(卡特兰数,递归)
来源:互联网 发布:重庆seo外包公司 编辑:程序博客网 时间:2024/04/30 12:28
Problem 1064 教授的测试
Accept: 149 Submit: 364
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
一年一度的研究生面试又快要来临了。为了测试学生对树结构的认识,同时也检验他们的编程能力,福州大学计算机系把面试的一项内容定为:要求学生们编程按编号顺序打印出节点个数不少于m的所有二叉树。
二叉树编号规则如下:
仅有一个节点的树编号为1。
当满足以下条件之一时,定义二叉树a的编号比b大:
1. a的节点数比b多。
2. 若a的节点数与b相等,且a的左子树编号比b的左子树大。
3. a的节点数和左子树编号都和b相等,且a的右子树编号比b的右子树大。
二叉树的节点用大写X表示,例如:
当然当m较大时,检验答案对错的工作也是很繁重的,所以教授只打算对其中的若干个编号的二叉树进行抽查,他想麻烦你编制一个程序能够产生编号为n的二叉树的标准答案。
Input
输入数据由多组数据组成。每组数据仅一个整数,表示n (1≤n≤10^8)的值。输入数据以n=0表示结束,该数据不要处理。
Output
对于每组数据,输出仅一行,即你求出的标准答案。
二叉树的输出格式为:
(左子树){若左子树为空则省略}X{根}(右子树){若右子树为空则省略}
其中{…}中的内容是说明,不必输出。例如,在上图中编号为5的树可表示为X((X)X);编号为6的树表示为(X)X(X)。
Sample Input
20
0
Sample Output
((X)X(X))X
卡特兰数的应用。用递归直接输出。根据这个树排名,来确定左子树的节点个数和排名,以及右子树的节点个数和排名。
关于卡特兰数的应用总结,可以参考这篇博客
http://blog.csdn.net/dacc123/article/details/50922138
#include <iostream>#include <string.h>#include <stdlib.h>#include <algorithm>#include <math.h>#include <stdio.h>using namespace std;long long int a[20];long long int n;int tag;void fun(int num,int n){ if(n==0) return; if(n==1) {if(tag==1)cout<<"X"; else cout<<"(X)";return;} int num2=0; int i; for( i=0;i<20;i++) { num2+=a[i]*a[n-i-1]; if(num2>=num) break; } num2-=a[i]*a[n-i-1]; num-=num2;num--; if(n!=tag) cout<<"("; fun(num/a[n-i-1]+1,i); cout<<"X"; fun(num%a[n-i-1]+1,n-i-1); if(n!=tag) cout<<")";}int main(){ a[0]=1; for(int i=1;i<20;i++) a[i]=(a[i-1]*(4*i-2)/(i+1)); while(scanf("%lld",&n)!=EOF) { if(n==0) break; int i; int num3=0; for( i=1;i<20;i++) { num3+=a[i]; if(num3>=n) break; } num3-=a[i]; int num2=n-num3; tag=i; fun(num2,i); cout<<endl; }}
- FZU 1064 教授的测试(卡特兰数,递归)
- FZU1064-教授的测试(卡特兰数)
- FZU 1064教授的测试(Catalan数的应用)
- JOJ1040:Trees(卡特兰数+递归)
- FZU 1064教授的测试
- pku1095卡特兰数+递归
- FZU 2098 刻苦的小芳(卡特兰数,动态规划)
- hdoj1100 Trees Made to Order(递归+卡特兰数,关于卡特兰数的讲解)
- 小兔的棋盘 (卡特兰数)
- 卡特兰数的应用(二)
- 卡特兰数的理解
- 卡特兰数的应用
- 卡特兰数的研究
- 扩展的卡特兰数
- 神奇的卡特兰数
- 【无处不在的卡特兰数】
- 卡特兰数的应用
- 卡特兰数的概念
- 复制学习
- WebAPI列子
- CSS常用属性
- 16.复杂数据结构
- 经验总结、自己出的面试题及参考
- FZU 1064 教授的测试(卡特兰数,递归)
- Java accessible方法
- Volley实现图片上传
- SDAU 贪心专题 01 小木棍
- Java transient关键字使用小记
- css之九宫格布局
- overflow :hidden 和 clear:both 与 clearfix撑起高度坍塌的父元素应用
- Android中异步加载方案
- 神奇的幻方