2015年4月2日星期四

[UVa] 699 - The Falling Leaves

一樣運用遞迴方法實作


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int pile_left[100], pile_right[100];
int root=0,flag=0,flag_left=0,flag_right=0;
void sol(int nodes){
  if(nodes!=-1){
    //printf("flag=%d nodes=%d\n",flag,nodes);
    if(flag<0){
      pile_left[-flag-1] += nodes;
      if(flag_left<-flag) flag_left = -flag;
    }
    else if(flag>0){
      pile_right[flag-1] += nodes;
      if(flag_right<flag) flag_right = flag;
    }
    else root+= nodes;
  }
  int s;
  scanf("%d",&s);
  if(s!=-1){
    flag--;
    sol(s);
    flag++;
  }
  scanf("%d",&s);
  if(s!=-1){
    flag++;
    sol(s);
    flag--;
  }
  return;
}
int main(){
  freopen("input.txt","r",stdin);
  int kase=0,r;
  while(scanf("%d",&r) && r!=-1){
    kase++;
    printf("Case %d:\n",kase);
    flag=0;
    flag_left=-1;
    flag_right=-1;
    root = 0;
    memset(pile_left,0,sizeof(pile_left));
    memset(pile_right,0,sizeof(pile_right));
    sol(r);
        if(flag_left>=0)
    for(int i=flag_left-1 ; i>=0 ; i--){
      printf("%d ",pile_left[i]);
    }
    printf("%d",root);
        if(flag_right>=0)
    for(int i=0 ; i<=flag_right-1 ; i++){
      printf(" %d",pile_right[i]);
    }
    printf("\n\n");
  }

  return 0;
}

沒有留言: