黑马程序员技术交流社区

标题: 一个算法题。。 [打印本页]

作者: 李朋霏    时间: 2012-7-20 02:43
标题: 一个算法题。。
问题:用1、2、2、3、4、5这六个数字,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。


作者: 李朋霏    时间: 2012-7-20 02:46
这个题是在JAVA论坛上看到的算法题,是中国移动的面试题,觉得非常好,借了过来,但是竟然看不懂JAVA实现的内容。
作者: 黄涛    时间: 2012-7-20 09:28
给个思路吧,代码就不写了,先把6个数存入string a;然后从新排列a并存入到b数组中,然后开始判断,if第三位等于4,则不输出,else {for循环{判断数组中0-5的数据,不等于3则继续循环,等于3则else{判断b[i+1 !=5]}如果是则输出,是则继续下一个循环}}......思路就写到这,有不明白的欢迎交流
作者: 许庭洲    时间: 2012-7-20 09:54
主函数代码:
static void Main(string[] args)
{
       int[] listdata = {  1, 2, 2,3,4,5 };
       permlist(listdata, 0, 6);
       Console.WriteLine(a);
       Console.ReadLine();
}
作者: 李朋霏    时间: 2012-7-21 12:28
许庭洲 发表于 2012-7-20 09:54
主函数代码:
static void Main(string[] args)
{

基本看不懂!
作者: 李朋霏    时间: 2012-7-21 12:30
黄涛 发表于 2012-7-20 09:28
给个思路吧,代码就不写了,先把6个数存入string a;然后从新排列a并存入到b数组中,然后开始判断,if第三位等于 ...

怎么  重新排列a并存入到b数组中  就这没思路。。
作者: 刘建素    时间: 2012-7-22 11:21
想了半天只是把六位数字的可能排序搞了一下 至于 涉及到的条件没进行判断  没做优化
class Program
    {
        static int i = 0;
        static List<List<string>> list = new List<List<string>>();
        static List<string> lls = new List<string>();
        static void Main(string[] args)
        {
            string[] a = { "1", "2", "2", "3", "4", "5" };//可以任意多个
            list.Add(lls);//初始化
            x(a);//排列
            print();//打印

            Console.ReadKey();

        }


        private static void x(string[] l)
        {
            List<List<string>> _l = new List<List<string>>();
            for (int f = 0; f < list.Count; f++)
            {
                _l.Add(list[f]);
            }
            list.Clear();
            for (int g = 0; g < _l.Count; g++)
            {
                List<string> _ls = _l[g];
                for (int j = 0; j <= _ls.Count; j++)
                {
                    List<string> _s = new List<string>();
                    if (_ls.Count > 0)
                    {
                        for (int r = 0; r < _ls.Count; r++)
                        {
                            _s.Add(_ls[r]);
                        }
                    }
                    
                    _s.Insert(j, l[i]);

                    list.Add(_s);
                }
            }
            i++;
            if (i < l.Count())
            {
                x(l);
            }
        }
        //打印
        private static void print(){
                for(int m=0;m<list.Count;m++){
            List<string> p = list[m];
                        for(int n=0;n<p.Count;n++){
                Console.Write(p[n]);
                        }
            Console.WriteLine();
                }
        }

    }
作者: 刘建素    时间: 2012-7-22 11:22
还希望有高手能找出解决方案  给贴代码及详细注释




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2