首页 新闻 会员 周边 捐助

给出数组最后一位与其他位置组合的所有可能

0
悬赏园豆:50 [已解决问题] 解决于 2013-05-29 16:10

数组{1,2,3,4}

1  4

1  2  4

1  2  3  4

1  3  4

2  4  

2  3  4

3  4  

 

数组{1,2,3}

1  3

1  2  3

2  3

给出数组最后一位和任意位置组合的所有可能

            object[] strlist = new object[] { 1, 2, 3, 4 };

            for (int i = 0; i < strlist.Length; i++)
            {
                      How do....
            }        
华北峰的主页 华北峰 | 初学一级 | 园豆:9
提问于:2013-05-29 11:12
< >
分享
最佳答案
1

参照上个回答我整理了下代码:

以下的代码可以得到你要的结果:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static string[] m_Data = { "1", "2", "3"};

        static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            for (int i = 0; i < m_Data.Length - 1; i++)  //这里把最后一个字符过滤掉,单独传过去
            {
                dic.Add(m_Data[i], i);
            }
            GetString(dic, m_Data[m_Data.Length - 1]);
            Console.ReadLine();
        }

        static void GetString(Dictionary<string, int> dd,  string lastStr)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            foreach (KeyValuePair<string, int> kv in dd)
            {
                if (kv.Key.Length <= lastStr.Length)
                {
                  Console.WriteLine(kv.Key + lastStr);   //  取单位的打印
                }

                for (int i = kv.Value + 1; i < m_Data.Length - 1; i++) //这里把最后一个字符过滤掉
                {
                    if (kv.Key.CompareTo(m_Data[i]) <= 0)  //这里判断数组的前后顺序
                    {
                        Console.WriteLine(kv.Key + m_Data[i] + lastStr);
                        dic.Add(kv.Key + m_Data[i], i);
                    }

                }
            }
            if (dic.Count > 0) GetString(dic, lastStr);
        }
    }
}

 

以上的代码需要整理,并不规范,请参照!

收获园豆:50
静行路者 | 初学一级 |园豆:150 | 2013-05-29 15:56

3q

华北峰 | 园豆:9 (初学一级) | 2013-05-29 16:10

@Diose: 

{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }

这个打印出现问题,是控制台的设置问题。

你把打印的地方修改成这样:

Console.Write(kv.Key + lastStr);   //  取单位的打印
Console.Write("  --  ");

Console.Write(kv.Key + m_Data[i] + lastStr);
Console.Write("  --  ");

这样就可以看到你要的结果了;

至于控制台如何设置, 你在网上再查查了;

静行路者 | 园豆:150 (初学一级) | 2013-05-29 16:30

@Diose: 

不过, 你这个还是存在问题, 你的字符串一定是大小顺序排列的 ?

如果不是的话, 这里需要取字符串的Key来比较, 原理是一样的。修改一下就可以了。 

静行路者 | 园豆:150 (初学一级) | 2013-05-29 16:34

@静行路者: 

。。控制台显示限制 我让忘了

 

不好意思!

华北峰 | 园豆:9 (初学一级) | 2013-05-29 17:04
其他回答(1)
0
        static string[] m_Data = { "A", "B", "C", "D", "E" }; 

        static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            for (int i = 0; i < m_Data.Length; i++)
            {
                Console.WriteLine(m_Data[i]);//如果不需要打印单元素的组合,将此句注释掉
                dic.Add(m_Data[i], i);
            }
            GetString(dic);
            Console.ReadLine();
        }

        static void GetString(Dictionary<string,int> dd)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            foreach (KeyValuePair<string, int> kv in dd)
            {
                for (int i = kv.Value + 1; i < m_Data.Length; i++)
                {
                    Console.WriteLine(kv.Key + m_Data[i]);
                    dic.Add(kv.Key + m_Data[i], i);
                }
            }
            if(dic.Count>0) GetString(dic);
        }

我在网上找到了解决的你问题相似的代码

URL:http://bbs.csdn.net/topics/300069382

朝曦 | 园豆:1073 (小虾三级) | 2013-05-29 13:08

谢谢你的回答!

但是这个不符合结果;

虽然可以从结果中取出来 但是 完全不符合本意,而不是全部取出 在筛选出要用的

支持(0) 反对(0) 华北峰 | 园豆:9 (初学一级) | 2013-05-29 13:40

@Diose: 你说完全不符合,说明你没认真思考。我和楼上的答案殊途同归。

支持(0) 反对(0) 朝曦 | 园豆:1073 (小虾三级) | 2013-05-29 19:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册