UVA-699 The Falling Leaves
阿新 • • 發佈:2018-12-18
對於這個題目,要分析學習的還是所應用的遞迴。
在寫遞迴具體步驟的時候,可以把目光集中到遞迴當中的一 項上,比如遞迴剛開始怎麼走,遞迴最後一步要結束了該怎麼走。
想遞迴,要著眼於大局,寫遞迴,要工筆細描,著眼單步;
這道題目是應用於樹的先序方式輸入的遞迴方式,在init()只作為最初的判斷和根節點的左右樹的遞迴入口;build()函式則是整個遞迴函式體,邊讀入邊統計。
#include <bits/stdc++.h> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <iostream> //#define LOCAL using namespace std; const int maxn=1e5+10; int sum[maxn]; void build(int p) { int v;cin>>v; if(v==-1) return; sum[p]+=v; build(p-1); build(p+1); } bool init() { int v;cin>>v; if(v==-1) return false; memset(sum,0,sizeof sum); int pos=maxn/2; sum[pos]+=v; build(pos-1); build(pos+1); return true; } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); #endif int case1=1; while(init()) { int p=0; while(sum[p]==0)p++; cout<<"Case "<<case1++<<":\n"<<sum[p]; p++; while(sum[p]!=0) cout<<" "<<sum[p++]; cout<<endl<<endl; } return 0; }