日期:2014-05-18  浏览次数:21030 次

C# 求简单高效算法
求算法:

有数组A和B, A{a,b,c,d,e,f}, B{1,2,3,4,5,6,7}

要求生成字符串X,可以指定生成X最小字符个数和最大字符个数,如果最小位数是0,则直接生成最大字符数

(X是由A和B中的元素拼接,可以仅A,也可以仅是B,也可以A和B都可以)

FUN(最小长度,最大长度)
{
  if(最小长度是0)
  {
  就只生成最大长度
  }
  else
  {
  从最小长度开生成起,一直大最大长度

  }

}



------解决方案--------------------
需求不明,举例说明吧,比如 长度是2,输出什么,规则是什么
------解决方案--------------------
还没明白 
如果生成的长度为6,能不能生成abcdef呢?aaaaaa行吗?
是随机生成还是有规律的生成?如a1b2cd
------解决方案--------------------
需求还是不明确,是否可以重复,如果不能重复,这个没有什么好的高效的算法,就是遍历了
------解决方案--------------------
开始就将左右的情况遍历完毕,你这个貌似对顺序也没要求,遍历的结果可以放在哈希结构中,要结果的时候直接去取
------解决方案--------------------
好像得用递归循环吧,帮顶
------解决方案--------------------
这个要是没什么限制的的话,不如把2个序列合到一个序列中 C去
然后 var result=from a in C
select a; 
//这个是取 1的时候.
var result= from a in C
from b in C
select string.format("{0}{1}",a,b);
//取2个的时候..要取多少自己加就得了
------解决方案--------------------
探讨

例: 最小长度是1 ,最大长度是3 生成的应该是

a
b
c
d
e
f
a1
a2
a3
.........
ff7

------解决方案--------------------
把A,B数组合并了,然后求子串就行了(只不过子串长度有规定而已,这种情况没有重复字符)。如果存在ff7,那么好像解就太多了。总体此算法不难。
------解决方案--------------------
探讨

例: 最小长度是1 ,最大长度是3 生成的应该是

a
b
c
d
e
f
a1
a2
a3
.........
ff7

------解决方案--------------------
a1和 1a .... abc 和cba这样的算不算重复了?
------解决方案--------------------
那用我前面说的那个linq to sql 吧 没得问题了...
------解决方案--------------------
你知道max=14时候结果有多少种吗? 你考虑过吗? 觉得真的有777存在?
------解决方案--------------------
13的最大长度次方+13的(最大长度次方)+……+13的最小长度次方


楼主这是有多少解啊……

估计你没表述清楚,你这样说的话,分2个数组完全没意义。
------解决方案--------------------
FF7... 为啥不是FFF?为啥不是777?谁规定了F比7大还是比7小?

------解决方案--------------------
C# code
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication8
{
    class Program
    {
        public void fun(int min, int max,string a)
        {
            if (min == 0)
            {
                fun1(max, a);
            }
            else
            {
                for (int i = min; i <= max; i++)
                    fun1(i, a);
            }
        }

        private void fun1(int p,string a)
        {
            string b;
            if (p == 1)
            {
                for (int i1 = 0; i1 < 13; i1++)
                {
                    b = a.Substring(i1, 1);
                    Console.WriteLine("{0}", b);
                }
            }
            if (p == 2)
            {
                for (int i1 = 0; i1 < 13; i1++)
                {
                    for (int i2 = 0; i2 < 13; i2++)
                    {
                        b = a.Substring(i1, 1)+a.Substring(i2,1);
                        Console.WriteLine("{0}", b);
                    }
                }
            }
            if (p == 3)
            {
                for (int i1 = 0; i1 < 13; i1++)
                {
                    for (int i2 = 0; i2 < 13; i2++)
                    {
                        for (int i3 = 0; i3 < 13; i3++)
                        {