C# 求简单高效算法 本帖最后由 caozhy 于 2012-08-21 16:56:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还没明白 如果生成的长度为6,能不能生成abcdef呢?aaaaaa行吗?是随机生成还是有规律的生成?如a1b2cd 例: 最小长度是1 ,最大长度是3 生成的应该是abcdefa1a2a3.........ff7 就是遍历生成字符串,X是由A或B中的元素拼接,可以仅A,也可以仅是B,也可以A和B都元素都在,注意小最长度是0 只生成最大长度的字符数 这个要是没什么限制的的话,不如把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个的时候..要取多少自己加就得了 把A,B数组合并了,然后求子串就行了(只不过子串长度有规定而已,这种情况没有重复字符)。如果存在ff7,那么好像解就太多了。总体此算法不难。 a1和 1a .... abc 和cba这样的算不算重复了? 那用我前面说的那个linq to sql 吧 没得问题了... 你知道max=14时候结果有多少种吗? 你考虑过吗? 觉得真的有777存在? FF7... 为啥不是FFF?为啥不是777?谁规定了F比7大还是比7小? 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(); } }} 这里感谢 zhuankeshumo 先把分给了,见贴 http://topic.csdn.net/u/20120821/17/9a364a32-a3e3-439d-99f7-df7ff694d97e.html C#不调用任何系统函数 这文件该用什么编码打开? 关闭程序时提示内存不能为读,但单步调试时不会报。 C# toolStripComboBox的一个小问题求帮助 关于提高导入数据库的效率问题 急求!!!请教高手,如何合并两个表的内容?在DataSet中 一个在C#类中使用MSComm的问题,求救! c#中如何指定struct中字符数组的大小? TreeView 节点选择怪问题 简单问题,知道的人告诉一下. 有个dgv的问题,请高手指点! 用c#怎么写保龄球计分程序
如果生成的长度为6,能不能生成abcdef呢?aaaaaa行吗?
是随机生成还是有规律的生成?如a1b2cd
b
c
d
e
f
a1
a2
a3
.........
ff7
然后 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个的时候..要取多少自己加就得了
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();
}
}
}