首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 求容易高效算法

2012-08-29 
C# 求简单高效算法求算法:有数组A和B,A{a,b,c,d,e,f}, B{1,2,3,4,5,6,7}要求生成字符串X,可以指定生成X最

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++)                        {                            b = a.Substring(i1, 1) + a.Substring(i2, 1) + a.Substring(i3, 1);                            Console.WriteLine("{0}", b);                        }                    }                }            }            .......            if (p == 13)            {            }                        }        static void Main(string[] args)        {            string a = "1234567abcdef";            Program g = new Program();            g.fun(1, 3, a);            Console.ReadKey();                    }    }} 


[解决办法]
省略地方自己加 你这种貌似更简单了

热点排行