一个全排列的笔试题

下面是某公司的java程序员的一个笔试题:
对1,2,3,4,5,6六个数字进行全排列,有两个条件:1.第三个数不能是4; 2.数字3和5不能相邻;请使用java打印出满足条件的所有排列。
下面我们进行分析:
1.我们可以将这个六个数字保存进一个整形数组中,这六个数字本身的全排列我们可以使用六个for循环嵌套来得出,对于第一个条件我们可以将第三个for循环加入一个判断,也就是第三个值不能为num[3],也就是不能为4,;对于第二个条件,我们可以将这些排列的值都变成字符串形式,然后可以通过String类的indexOf()方法来解决第二个条件
2.实现代码:

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Hello
{
    public static void main(String[] args)
    {
        int num[] = {1,2,3,4,5,6};
        long n;
        Set result = new TreeSet();
        Set result2 = new TreeSet();
        //1-6这几个数字的全排列,并且第三个数不是4代码实现
        int a,b,c,d,e,f;
        for(a = 0 ; a < 6 ;a ++)
        {
            for(b = 0 ; b < 6 ; b ++)
            {
                if(a == b)
                {
                    continue;
                }
                for(c = 0 ; c < 6 ; c ++)
                {
                    if(a == c || b == c || c == 3)
                    {
                        continue;
                    }
                    for(d = 0 ; d < 6 ; d ++)
                    {
                        if(a == d || b == d || c == d)
                        {
                            continue;
                        }
                        for(e = 0 ; e < 6 ; e ++)
                        {
                            if(a == e || b == e || c == e || d == e )
                            {
                                continue;
                            }
                            for(f = 0 ; f < 6 ; f ++)
                            {
                                if(a == f || b == f || c == f || d == f || e ==f )
                                {
                                    continue;
                                }
                                n = num[a]*100000+num[b]*10000+num[c]*1000+num[d]*100+num[e]*10+num[f];
                                result.add(n);
                            }
                        }
                    }
                }
            }
        }

        //3,5,不相邻代码实现
        String temp;
        Iterator iterator = result.iterator();
        while(iterator.hasNext())
        {
            temp = iterator.next() + "";
            if(temp.indexOf("35") == -1 && temp.indexOf("53") == -1)
            {
                result2.add(temp);
            }
        }

        System.out.println("满足条件的全排列为:");
        Iterator iterator2 = result2.iterator();
        while(iterator2.hasNext())
        {
            System.out.println(iterator2.next());
        }
    }
}

你可能感兴趣的:(算法)