您的位置:首页 > 其它

POJ 1095 Trees Made to Order

2013-03-06 23:05 267 查看
闲来无事,跑到POJ上找找水题,好久不写C的代码,感觉生疏了。

View Code

#include<stdio.h>
#include<string.h>
#define MAXN 19
int num[MAXN];

void OutputBinaryTree(int n, int k, bool s) {
if (n == 0) return;
int i, j, sum;
for (i = sum = 0, j=num[n-1]; sum + j < k; sum += j, ++i, j = num[i] * num[n-1-i]) {}
k -= sum;
if(s) printf("(");
OutputBinaryTree(i, (k + num[n-1-i] - 1) / num[n-1-i], true);
printf("X");
j =  k % num[n-1-i];
OutputBinaryTree(n-1-i, j == 0 ? num[n-1-i] : j, true);
if(s) printf(")");
}

int main(){
int i, j, k;
memset(num, 0, sizeof(int) * MAXN);
num[0] = num[1] = 1;
for (i = 2; i < MAXN; i++)
for (j = 0; j < i; j++)
num[i] += num[j] * num[i-1-j];

while(scanf("%d", &k) && k) {
for (i = 1; k > num[i]; k -= num[i], ++i){}
OutputBinaryTree(i, k, false);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: