2017-06-03 85 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分钟的等待时间后,我会将此标记为正确的? –