2015-05-03 25 views
0

我正在參加一個離散數學課程,我需要開發一個C++程序,它接收一個字符串作爲輸入並返回它表示的自然數(如果有的話) 。自然數定義如下: 0 = {},1 = {{}},2 = {{} {{}}},3 = {{} {{}} {{} {{}}}}和等等。我認爲這可以遞歸地完成,基本情況是「{}」,但我不知道如何去思考解決方案。我的一位朋友告訴我,他已經注意到,開放的大括號總是2^n,但我覺得這不是那麼簡單,因爲這有一些問題,我想。 謝謝!自然數的集合論定義(遞推)

+0

如果您確保輸入字符串格式正確(實際上代表數字),那麼計數大括號應該足夠。如果您還需要檢測並拒絕無效輸入,那麼事實並非如此簡單。 –

+0

去掉外支架。將字符串拆分爲「元素」(開始和結束大括號平衡的序列)。在格式良好的字符串中,第一個元素必須是「{}」,並且每個後續元素都是所有先前元素的串聯,並由一對額外的大括號包圍。 –

+0

請注意,數字n只是包含0到n-1的集合。 – chepner

回答

1

只計算開放大括號不會區分來自格式錯誤輸入的格式正確的輸入。

首先編寫一個程序,該程序可以構造並輸出給定​​輸入值的括號字符串表單編號。

這將澄清你的問題。那麼你可以將一個支撐字符串輸入與一個構造的支撐字符串進行匹配嗎?你可以從那裏到完整的解決方案嗎?

編輯:上述解決問題的技巧是先解決一個較簡單的子問題或相關問題。另一種技術是尋找多種方法,然後選擇一種方法(如果結果很難,則準備切換)。

解決此問題的另一種方法是將輸入讀入STL集合集。例如:

class Set { 
    std::set<Set> elements; 
public: 
    void read(std::istream in) {...} // recursively reads & adds Sets 
    int size() {...} 
} 
+0

我不確定我明白你的意思。難道我應該建立一個相反的計劃嗎?收到一個號碼並輸出設置的表格?請澄清一下:) – Mhh

+0

是的。首先寫一個相反的程序。構造一個字符串比解析一個字符串更容易,但它仍然執行相同的遞歸。 – Jerry101

+0

哦,我現在明白了!非常感謝! :D – Mhh