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;
}