pku-1095-Trees Made to Order

來源:互聯網
上載者:User

考察點:數學,找規律,

思路:先確定N有幾個節點,然後確定左右各有多少棵樹,及位置編號,用中序遍曆列印左右子樹

收穫:對於邊界 要明確,數組是從1開始編號還是從0開始編號,要統一

經驗:對於找規律的題目,要善於運用遞迴等思想去發現規律

ACcode:

Code
#include <iostream>
using namespace  std;

long a[20] = { 1, 1, 2, 5, 14, 42, 132,
429, 1430, 4862, 16796, 58786, 208012,
742900, 2674440, 9694845, 35357670,
129644790, 477638700 };
void solve(int);
void print(long,int);
int main()
{
    int n;
    cin>>n;
    while(n!=0)
    {
        solve(n);
        cin>>n;
    }
    return 0;
}
void solve(int n)
{
    long temp=0;
    int nodes=0;
    while (temp<=n)
    {
        temp+=a[nodes++];
    }
    nodes--;
    temp-=a[nodes];
    n=n-temp;
    print(n,nodes);
    cout<<endl;
}
void print(long index,int nodes)
{
    if (nodes==1)
    {
        cout<<"X";
        return;
    }
    long temp=0;
    int j=0;    
    for (int i=0;i<=nodes-1;i++)
    {
        temp+=a[i]*a[nodes-1-i];
        if (temp>index)
        {
            temp-=a[i]*a[nodes-1-i];
            j=i;
            break;
        }
    }
    if (j!=0)
    {
        int pos1=(index-temp)/a[nodes-1-j];
        cout<<"(";
        print(pos1,j);
        cout<<")";
    }
    cout<<"X";
    if (nodes-1-j!=0)
    {
        int pos2=(index-temp)%a[nodes-1-j];
        cout<<"(";
        print(pos2,nodes-1-j);
        cout<<")";        
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.