A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李朋霏 中级黑马   /  2012-7-20 02:43  /  1514 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题:用1、2、2、3、4、5这六个数字,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
这个题是在JAVA论坛上看到的算法题,是中国移动的面试题,觉得非常好,借了过来,但是竟然看不懂JAVA实现的内容。
回复 使用道具 举报
给个思路吧,代码就不写了,先把6个数存入string a;然后从新排列a并存入到b数组中,然后开始判断,if第三位等于4,则不输出,else {for循环{判断数组中0-5的数据,不等于3则继续循环,等于3则else{判断b[i+1 !=5]}如果是则输出,是则继续下一个循环}}......思路就写到这,有不明白的欢迎交流

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
主函数代码:
static void Main(string[] args)
{
       int[] listdata = {  1, 2, 2,3,4,5 };
       permlist(listdata, 0, 6);
       Console.WriteLine(a);
       Console.ReadLine();
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-7-20 09:54
主函数代码:
static void Main(string[] args)
{

基本看不懂!
回复 使用道具 举报
黄涛 发表于 2012-7-20 09:28
给个思路吧,代码就不写了,先把6个数存入string a;然后从新排列a并存入到b数组中,然后开始判断,if第三位等于 ...

怎么  重新排列a并存入到b数组中  就这没思路。。
回复 使用道具 举报
想了半天只是把六位数字的可能排序搞了一下 至于 涉及到的条件没进行判断  没做优化
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();
                }
        }

    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
还希望有高手能找出解决方案  给贴代码及详细注释
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马