求遍历算法

bugttp 2012-08-21 05:12:07
求遍历算法(.net 2.0):

有数组A和B, A{a,b,c,d}, B{1,2,3}(相当实际应用数组元素可能要多些)
要求生成字符串X,可以指定生成X最小字符个数和最大字符个数,如果最小位数是0,则直接生成最大字符数
(X是由A和B中的元素拼接,可以仅是A中元素,也可以仅是B中元素,也可以是A和B的元素都存在)

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


举例1:
最小长度是0 ,最大长度是2(假设两个数组都使用)
输出
aa
ab
ac
ad
a1
a2
………33

举例2:
最小长度是1 ,最大长度是2(假设两个数组都使用)
输出
a
b
c
d
1
2
………33
====================================================================
求达人代码!!!
...全文
294 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtee 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

C# code
class Program
{
public static String[] A={"a","b","c","d","1","2","3"};
static void Main(string[] args)
{
min_miax(1,2);//改这儿就OK
}
pu……
[/Quote]正解 学习了
xpingping 2012-08-22
  • 打赏
  • 举报
回复
class Program
{
public static String[] A={"a","b","c","d","1","2","3"};
static void Main(string[] args)
{
min_miax(1,2);//改这儿就OK
}
public static void min_miax(int min, int max)
{
if (min == 0)
{
find(max, "");
}
else
{
for (int i = min; i <= max; i++)
{ find(i, ""); }
}

}

public static void find(int flag, String str)
{
if(flag==str.Length)
{
Console.WriteLine(str);
}
else
{
for(int i=0;i<=A.Length-1;i++ )
{
find(flag,str+A[i]);
}
}
}
}
xpingping 2012-08-22
  • 打赏
  • 举报
回复
class Program
{
public static String[] A={"a","b","c","d","1","2","3"};
static void Main(string[] args)
{
min_miax(1,2);//改这儿就OK
}
public static void min_miax(int min, int max)
{
if (min == 0)
{
find(max, "");
}
else
{
for (int i = min; i <= max; i++)
{ find(i, ""); }
}

}

public static String find(int flag, String str)
{
if(flag==str.Length)
{
Console.WriteLine(str);
return str;
}
else
{
for(int i=0;i<=A.Length-1;i++ )
{
find(flag,str+A[i]);
}
}
return "";
}
}
dianyancao 2012-08-22
  • 打赏
  • 举报
回复
将集合A和B合并成集合C,集合C的元素个数为n
要获取由集合C中的k个元素组成的字符串,可以使用n进制的计数数组代替递归,计数数组一共k个元素
每个元素有n种不同的数值,对应集合C中的n个元素
将0到n^k-1的整数依次转换成n进制,再根据对应关系转换成字符串即可
newtee 2012-08-21
  • 打赏
  • 举报
回复
你再改改吧 我不贴了 17楼的程序应该差不多了 还要改一下
newtee 2012-08-21
  • 打赏
  • 举报
回复
貌似不对了 Sorry
newtee 2012-08-21
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication9
{
class Program
{
void Permutation(char[] pStr, int begin, int end)
{
if (begin == end - 1) //只剩一个元素
{
for (int i = 0; i < end; i++) //打印
Console.Write(pStr[i]);
Console.WriteLine(string.Empty);
}
else
{
for (int k = begin; k < end; k++)
{
swap(ref pStr[k], ref pStr[begin]); //交换两个字符
Permutation_Solution1(pStr, begin + 1, end);
swap(ref pStr[k], ref pStr[begin]); //恢复
}
}
}

private void swap(ref char p1,ref char p2)
{
char c;
c = p1;
p1 = p2;
p2 = c;
}
static void Main(string[] args)
{
char[] c = { 'a', 'b', 'c', 'd' };
Program g = new Program();
for (int j = 0; j < 4; j++)
{
g.Permutation(c, 0, j+1);
}
Console.ReadKey();
}
}
}
这种只能求出不带重复的
threenewbee 2012-08-21
  • 打赏
  • 举报
回复
给你点思路,这个问题可以用递归解决。
一个元素就是枚举每个元素
组合2个元素的就是拿每个元素的去再组合1个元素。
组合n个元素就是组合n-1个元素,再用每个元素去配。

码自己去写吧。
bugttp 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

侮辱技术的人连菜鸟都不配叫。
[/Quote]

用词不对请见谅!
bugttp 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

再说2L代码就不错嘛。很适合你贴,要算多少组合就贴多少层好了。
[/Quote]

二楼发连接参数的代码看不懂,所以用不了
threenewbee 2012-08-21
  • 打赏
  • 举报
回复
侮辱技术的人连菜鸟都不配叫。
bugttp 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
“码”是写出来的,不是贴出来的。

如果你以为“码”都是现成的贴贴而已的,真的,为你这号人写点代码真的不值。

要代码,上百毒,一搜一大把。
[/Quote]

发贴有什么问题的地方请大家见谅。愿意写的朋友感谢你们,不愿意写我也不会怪谁,请不要“为你这号人写点代码真的不值”以此类话来侮辱我们菜鸟!
bugttp 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:

A、B元素个数是不定的,如果是 1000个元素? 那要写到1000吗?
我瞎写的 我只是想开个头 不然没人拿代码出来 1楼给的就是答案啊
[/Quote]

感谢你,另一个贴的分我已经给你了!!:)
newtee 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

A、B元素个数是不定的,如果是 1000个元素? 那要写到1000吗?
[/Quote]我瞎写的 我只是想开个头 不然没人拿代码出来 1楼给的就是答案啊
bugttp 2012-08-21
  • 打赏
  • 举报
回复
A、B元素个数是不定的,如果是 1000个元素? 那要写到1000吗?
bugttp 2012-08-21
  • 打赏
  • 举报
回复
zhuankeshumo ,你的p的意思是 A 、 B 两元素的总数吧

X是由A和B中的元素拼接,可以仅是A中元素,也可以仅是B中元素,也可以是A和B的元素都存在(就是说,A可能没元素,B也可能没元素), 这点从你写的代码来看都不重要,主要是 A、B元素是不定的

threenewbee 2012-08-21
  • 打赏
  • 举报
回复
再说2L代码就不错嘛。很适合你贴,要算多少组合就贴多少层好了。
threenewbee 2012-08-21
  • 打赏
  • 举报
回复
“码”是写出来的,不是贴出来的。

如果你以为“码”都是现成的贴贴而已的,真的,为你这号人写点代码真的不值。

要代码,上百毒,一搜一大把。
bugttp 2012-08-21
  • 打赏
  • 举报
回复
感谢 zhuankeshumo 。。。

还有达人贴码吗???
newtee 2012-08-21
  • 打赏
  • 举报
回复
如果要去掉重复的字符就在i2到i13对应的for(;;)语句里加上i2+1...i13+1
加载更多回复(3)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧