2017-06-03 149 views
0

我偶然發現了一個免費的CodeAcademy課程,該課程涵蓋了大O,並且在我遇到特定問題之前就已經完成。這似乎很容易,但我不知道爲什麼我有這樣艱難的時間。打印數組中字符串對的所有可能組合

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"]; 

任何人都可以提供一些見解,我將如何去打印出此數組中的所有可能的組合對?例如,它應該打印出像

Alice, Bob 
Dave, Mark 
Ed, Lisa 

而且,可以說,沒有對應該永遠配對本身,或者重複一個已經存在的對。例如,如果我們已經有「Ed,Lisa」,它絕不應該印出「Lisa,Ed」。

我開始了兩個for循環,然後合法只是不知道從哪裏去哪裏令人沮喪!

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"]; 

for(var i = 0; i < people.length; i++){ 

    for(j = 0; j < people.length; j++) { 
     // some fancy stuff here 
    } 
} 

解決方案並非真的需要用Javascript(但會很好),也許PHP或Java也可以。

回答

5

您可以使用2 for循環獲取所有組合。想法是修復第一個元素,並通過迭代列表來更改每對中的第二個元素。現在的問題是,第二個循環從哪裏開始進行迭代?

我們不需要一對具有相同的元素,所以在這裏i can't be same as j (i!=j),我們不需要一對(B,A)(A,B)已經在列表中。因此,從i+1開始對內循環進行迭代,以確保它在打印(A,B)時不會打印(B,A)

var people = ["Alice", "Bob", "Carol", "Dave", "Ed", "Mark", "Tom", "Lisa", "Sarah"]; 

var total_people = people.length; 
for(var i=0;i<total_people;i++) 
{ 
    for(var j=i+1;j<total_people;j++) 
    { 
     document.write(people[i]+" , "+people[j]+"<br>"); 
    } 
} 
+0

我認爲這實際上有效。我在Java編輯器中測試過它,而且我沒有得到你提到的「Bob,Alice」@Jonasw –

+0

@Daniel Zuzevich是的,那是我的錯誤,已經編輯我的評論 –

+0

沒有問題。優勝者優勝者雞晚餐!這是一個不錯的和簡單的解決方案,可以很容易地轉移到JS。非常感謝。當Stack經過4分鐘的等待時間後,我會將此標記爲正確的? –

相關問題