uva 699 - The Falling Leaves

1052 ワード

与えられたシーケンスループ順にツリーを構築しながら木の葉の和を統計すると,ルートノードは大きな配列の中間インデックスで始まり,左右のツリーは順次両側に展開する.
 
 
#include<stdio.h>
#define MAX 1000

int result[MAX];
int cases=1;

void printLeaves() {
	printf("Case %d:
",cases++); int i; for (i = 0; i < MAX; i++) { if (result[i]) { printf("%d", result[i]); if (i + 1 < MAX && result[i + 1] != 0) printf(" "); } } printf("

"); } int buildTree(int idx) { int num; scanf("%d", &num); if (num == -1) return 0; result[idx] += num; buildTree(idx - 1); buildTree(idx + 1); return 1; } int main() { cases=1; while (1) { int i; for (i = 0; i < MAX; i++) result[i] = 0; if (!buildTree(MAX / 2)) break; printLeaves(); } return 0; }