sally0909/Llama3_Dataset huggingface dataset:
題目: 寫C++程式碼說明傳參考呼叫call by reference。
答案: call by reference 跟 call by value 不同的是，call by value 是將值複製到 function 裡面再執行該 function，因此不會引想到帶入的引數。 而 call by value 是將「記憶體位置」帶入 function，因此如果在 funcion 裡面改動到參數的值，在呼叫 function 時帶入的引數會隨之改動。  以下是程式碼 : #include<iostream> #include<string> // 簡單的 enum 存可以喝的飲料，其中 NOTHING 是指沒有飲料  enum BeverageType { COFFEE, TEA, WATER, CYANIDE, BEER, PARAQUAT, NOTHING };  class Cup{     // 公開的      public:         Cup(){             isEmpty = true;             type = NOTHING;         }              // 為了呈現 call by reference跟call by value的差別，因此我用了static         // 加了 & 字號就是將地址傳到這個function          static Fill(Cup & cup, BeverageType type){             cup.type = type;             cup.isEmpty = false;          }                  // call by value         static AnotherFill(Cup cup, BeverageType type){             cup.type = type;             cup.isEmpty = false;          }                  // 裡面是啥          BeverageType whatIsInside(){             if(!isEmpty) return type;             else return NOTHING;         }                  // 是否為空          bool isItEmpty(){             return isEmpty;         }              // 非公開的      private:         bool isEmpty; // 是否為空          BeverageType type; // 種類  };  int main(){     BeverageType coffee = COFFEE;     // Two ordinary cups     Cup cup1, cup2;     // fill cup1     Cup::Fill(cup1,coffee);     // fill cup2     Cup::AnotherFill(cup2,coffee);          if(cup1.isItEmpty()) printf( cup1 is empty\n );     else printf( cup1 is not empty\n ); // 會印出這個      if(cup2.isItEmpty()) printf( cup2 is empty\n ); // 會印出這個      else printf( cup2 is not empty\n );      }  下面是上面程式碼的圖
評論: Good example.  Other comments:  1. There is one typo in the 2nd line:  而 call by reference value 是將「記憶體位置」帶入 function，...   2. Explain more about static member functions, e.g., how it still works without using 'static'.  3. Is there any reference like this?
題目: 合法運算式若有三組括弧，可以有幾種不同的形式？例如()()()和(()())就是二種不同的形式。
答案: 5種  1.((()))  2.(()())  3.(())()  4.()()()  5.()(())  算法：(2*n!/n!*n!)-(2*n!/(n+1)!*(n-1)!)
評論: 如果延伸到4組括弧、5組括弧、... 能否以此類推找出答案？
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 在回合制多人遊戲裡面，所有玩家的回合需要用環狀鏈結串列來決定，假如遊戲有4個玩家，從玩家一到玩家二到玩家三最後到玩家四時，因為玩家四是最後一個，如果不是使用環狀鏈結串列的話，玩家四的next會指向ＮＵＬＬ，造成沒辦法持續進行遊戲，所以在這邊使用環狀鏈結串列，將玩家四的next指向玩家一，以使遊戲能夠不斷的進行。
評論: Reasonable example...
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 環狀鏈結串列Circularly linked list簡述:   1. 最後一個節點的指標會指向第一個節點。   2. 沒有任一個節點指向NULL，每個節點都有後一位。  舉個簡單的例子，在團康遊戲中，大家很常會圍成一個圈，目的是為了讓每一個人都能玩到遊戲，並且還能玩好幾回合，這就很像環狀鏈結串列的概念，人就是串列中的節點，左右(前後)兩邊都有人(節點)，也就是說，串列像環狀一樣，不論從哪一個節點開始出發，繞一圈都會經過每一個節點。  使用環狀串列:   1. 在建立第一個節點的時候，第一個節點不是指向NULL，而是指向他自己。   2. 在計算長度的時候，不是指向NULL停止，而是指向第一個時停止。(停止條件不一樣)  環狀鏈結串列的   優點: 想查詢全部資訊，任一節點都可以作為始點。   缺點: 不能隨機讀取指定位置的資料，只能一個一個走到指定的位置才能讀取。
評論: 詳盡清楚！ Good~清楚明瞭!
題目: 寫C++程式碼說明傳參考呼叫call by reference。
答案: int main() {     vector <int> vec{1, 2, 3, 4, 5, 6, 7, 8};     cout <<  call by value:     ;     for(auto i:vec)         i++;     for(auto i:vec)         cout << i <<    ;      cout <<  \ncall by reference: ;     for(auto&i:vec) // call by reference         i++;     for(auto i:vec)         cout << i <<    ;  }  call by value:       1 2 3 4 5 6 7 8 call by reference:2 3 4 5 6 7 8 9  只有call by reference才會真正改變呼叫變數的值
評論: The code should be able to run.  Do not use  auto  in this course, please.  If you really like it, you may also try: for(const auto&i: vec).
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 環狀鏈結串列 Circular Linked List：   說明：   	將單向鏈接串列最後一個節點的指標，指向第一個節點(HEAD) 	不論從哪個節點開始讀取，都能經過所有的節點，不會指向NULL   舉例：  像是團康遊戲 鬼抓人，大家會圍成一個圓圈，先選一個人當鬼 鬼會在圓圈外尋找下手的目標，假設這個鬼拍了你 你就要站起來追他   	如果追到他，他就繼續當鬼 	如果讓鬼跑一圈，搶坐在你原本的位置上，那就要換你當鬼   上述的遊戲，就很像是環狀連節串列，不管鬼從哪邊開始跑哪邊開始挑對象，他跑的路徑一定會經過所有人   另外還有約瑟夫問題，其解法也是使用環狀鏈結串列來模擬整個過程   參考：  https://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98  https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%8E%AF%E9%93%BE%E8%A1%A8
評論: OK wow good good
題目: 合法運算式若有三組括弧，可以有幾種不同的形式？例如()()()和(()())就是二種不同的形式。
答案: 答案為五種，解題結果如下:  首先，合法運算式的括號必須符合第一個是左括號、最後一個是右括號的規則。  因此我直接假設，三組括號中其中有一組括號負責滿足這個規則。  剩下就是兩組括號(兩種相異物)的排列組合數，答案是C4取2等於6。  而最後的答案並不是6。  在合法運算式當中，若在已滿足括號成對的情況之下的下一個出現右括號(例如「()」的下一個出現右括號)  即為不合法，因此此題我假設已滿足一對括號且下一個為右括號的情況(「(()XX)」) PS:這裡的兩個X一樣要符合左右括號數量相同的規則  此時不合法的情況就是第一個X是右括號的情況，也就是一種(C1取1)。  最後的答案是 6-1=5  如果是四組以上括號一樣可以照著這個思路去計算。(第一次假設一組括號成對，第二次假設兩組......，將所有不合法的情況除去)
評論: 讚 思考邏輯的表達敘述都很清楚，只是對於第二句話指出的規則不太清楚：   合法運算式的括號必須符合第一個是左括號、第二個是右括號的規則。   第一個是左括號沒問題，但是，第二個為什麼必須是右括號呢？例如：( (  (  ) ) ) 也是合法的呀。
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 環狀鏈結串列是指鏈結串列的尾巴指向頭  可以應用在循環的資料ex Queue  特性    	對於資料沒有明確的頭跟尾的定義 	沒有結點指向NULL 	即使是單向環狀鏈結串列，不論從那個結點開始，所有節點皆可造訪
評論: 第一句話:  環狀鏈結串列是指鏈結串列的尾巴   是否沒寫完？ good good
題目: 合法運算式若有三組括弧，可以有幾種不同的形式？例如()()()和(()())就是二種不同的形式。
答案: 稍稍改個命題：n組合法的括號能有幾種組合？  數學上，這些組合所形成的數列名叫卡塔蘭數（Catalan number）。  一般公式：    另一種表達式：    （還有多種表達式...）  ※註：此數列定義第0項（n = 0）為1。  要解釋為什麼能套用卡塔蘭數列，我用第二種表達式來解釋。  首先，我們知道合法的括號必然成對；因此n對括號有2n個括號，左括號與右括號的數量都是n。  因此，所有的組合數為(2n)!/n!*n!，化簡為C(2n, n)。～式(1)  再來，判斷列式時必是由左向右，且第一位必為左括號；因此，由第一位向右掃到任意一點時，經過的左括號數量永遠大於或等於經過的右括號的數量；亦即，左括號不是未成對就是成對，右括號不是成對就是還沒掃到（未出現）。  現在來找不合法的組合數，條件一樣為左右括號各n個，設m由0開始。假設掃描到第2m+1位時，有m+1個右括號及m個左括號（亦即，左括號個數<右括號個數），則剩餘的字串中會有n-m個左括號及n-(m+1)個右括號。將2m+1位以後的括號映射（左變右，右變左），則右括號會有n+1個，左括號會有n-1個。因此，所有非法的組合數為(2n)!/[(n+1)!*(n-1)!]，化簡為C(2n, n+1)。～式(2)  由式(1)與式(2)，可得所有合法的組合數為C(2n, n) - C(2n, n+1)，屬於卡塔蘭數列的表達式之一。  因此，若有三組括弧，可以有C(6, 3) - C(6, 4) = 20 - 15 = 5種組合，其它以此類推。  【另解：棋盤方格法】  對，就是高中數學的排列組合那個單元。  假設有一個n*n的棋盤，左下角是起點，右上角是終點，移動方式只能向右或向上，令C(n)為走單調路徑且不越過對角線的個數。  1. n*n格的棋盤：代表左右括弧都各為n個的所有可能組合數。  2. 移動方式只能向右或向上：向右代表左括號，向上代表右括號。  3. 不能越過對角線：合法表達式的第一位只能是左括號，如果第一步就向上，亦即第一位就是右括號，不合法。  所以，以左下到右上的對角線為界，左邊的路徑是不合法的括號組合，右邊的則是合法的。  以n = 4為例：    這14個路徑圖分別代表14種合法組合：  (1)：(((())))  (2)：((()()))  (3)：((())())  (4)：(()(()))  (5)：()((()))  (6)：(()()())  (7)：((()))()  (8)：()(()())  (9)：(())(())  (10)：(()())()  (11)：(())()()  (12)：()(())()  (13)：()()(())  (14)：()()()()  其它組合也可如法炮製。  再扯就要扯到離散了  參考：  https://math.mit.edu/~djk/18.310/18.310F04/parentheses.pdf  https://zhuanlan.zhihu.com/p/143272203  https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0  https://www.twblogs.net/a/5b9979542b717757338fb79d  https://math.stackexchange.com/questions/2991347/catalan-numbers-sequence-of-balanced-parentheses  https://www.twblogs.net/a/5b7dd1042b71776838540a8f  https://blog.csdn.net/u011489043/article/details/77884434
評論: 讚 Excellent!  以下是畫蛇添足的補充：   將2m+1位以後的括號映射（左變右，右變左）  這個關鍵步驟之後，  左括號個數 = m + (n-(m+1)) = n - 1  右括號個數 = (m+1) + (n-m) = n + 1  換一個方式想，到第2m+1位為止左括號多一個，剩餘的原本左括號少一個，經過上述步驟後反而變成多一個，因此總共多二個。
題目: 合法運算式若有三組括弧，可以有幾種不同的形式？例如()()()和(()())就是二種不同的形式。
答案: 合法運算式若有三組括弧，可以有幾種不同的形式？    總共有5種形式
評論: Nice code!  Next time you'd better provide the code in plain text to be verified by the others. good 哇 讚
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 環狀鏈結串列是指鏈結串列的最後一個節點會指向串列的第一個節點，而非像單向鏈結串列指向null。  像是數位相框的照片隨順序撥放，到最後一張圖片時可以回到第一張圖片重新開始，可以運用在需要一直進行「下一個」動作的模式上，且不管從哪點開始都能走遍每個節點。
評論: good wow Nice example!
題目: 舉例說明使用環狀鏈結串列Circularly linked list的情境。
答案: 假設用單向鏈結串列當作音樂mp3清單撥放器指針的話，從第一首歌造順序撥放到最後一首歌播完就會停止  但是使用環狀串列當作音樂mp3清單撥放器的指針的話，最後一首歌播完不會停止反而回到第一首歌持續輪迴，或者我們可以設條件跑完第一圈就刪除某首歌這樣。  因為單向Circular linked list的tail指向head 代表著這個串列不會有NULL產生的狀況，所以怎麼前進都會循環。
評論: Good example!
題目: 合法運算式若有三組括弧，可以有幾種不同的形式？例如()()()和(()())就是二種不同的形式。
答案: 張元翔老師的演算法分析有教到，這是卡塔蘭數列 此題題目的括弧變化為五種，算式及其他舉例如下方兩張圖
評論: You need to write down more descriptions to explain what you draw in the pictures.