我正在用PHP編寫一個應用程序,用戶可以輸入兩組信息,並打印出兩組數據。目標是通過練習不同模式的問題和答案,將其作爲學習語言的教學工具。是否有算法輸出兩組元素的所有可能組合?
例如,我們可以練這個問題:「你有沒有試過......?」另外還有四項活動之一,如蹦極,帆傘運動,跳傘和潛水。還有四個可能的答案:
- 是的,我有,我很喜歡它。
- 是的,我有,但我不喜歡它。
- 不,我沒有,但我想嘗試一下。
- 不,我沒有,我不想嘗試它。
用戶將輸入兩組數據,然後應用程序將打印包含問題和答案的所有可能組合的卡片。例如,卡1看起來是這樣的:
- 跳傘:是的,我有,我很喜歡它。
- 水肺潛水:是的,但我不喜歡它。
- 滑翔傘:不,我沒有,但我想嘗試一下。
- 蹦極跳:不,我沒有,我不想嘗試它。然後
下一張牌可能是這樣的:
- 跳傘:是的,我有,但我不喜歡它。
- 水肺潛水:不,我沒有,但我想嘗試一下。
- 滑翔傘:不,我沒有,我不想嘗試它。
- 蹦極:是的,我喜歡。
因此,大家可以看到,有很多不同的可能組合。這個想法應該是兩個列表的長度相同,以允許打印出所有的可能性。同樣重要的是,任何問題或答案都不能在任何卡片上多次使用,並且這兩張卡片可能是相同的。什麼是最好的方式去做這件事?實際的投入和產出不是問題 - 我以前做過類似的事情。我只需要算法來生成組合。
編輯:我想我真正追求的是保持在同一順序每張卡的活動,但有答案的每一個可能的組合。所以我真正需要的是能夠生成以下一組索引,以便從answers數組中獲取數據。所以,我真的希望更多的東西是這樣的:
- 0,1,2,3
- 0,1,3,2
- 0,2,1,3
- 0,2,3 ,1
- 0,3,1,2
- 0,3,2,1
- 1,0,2,3
- 1,0,3,2
- 1,2,0 ,3
- 1,2,3,0
...等等,直到產生了所有可能的組合。
的基本算法是遍歷你的第一個元素,在該循環,循環通過你的第二個元素 –
這隻會給數量有限(例如:卡片1:0-0,1-1,2-2,3-3;卡片2:0-1,1-2,2-3,3-0等)的組合)。我也想要所有的組合不合適(例如:卡片12:0-2,1-1,2-0,3-3;卡片21:0-3,1-1,2-0,3- 2)。 – blainarmstrong
@blainarmstrong由於編輯後的問題已經闡明瞭你想要的內容,所以我添加了一個新答案(即使它不再正確,我也會保留舊答案,因爲我覺得它回答了我和他人所認爲的問題當時的標準)。 – Stegrex