求一算法!

赢光小虾米 2009-10-14 08:42:32
我想让数字和字母包括特殊字符任意组合?比如 1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f还有其它特殊字符%……&¥#等等。组合结果如下 1,2,2b,123,231,252,2qg,2ab,22a,33b,234b等等。一个字符的组合可以,任意多的字符组合也可以。只要不重复就可以。
而且打印出所有组合的字符。
...全文
183 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcl258586301 2009-11-19
  • 打赏
  • 举报
回复
楼主勇气可嘉
mngzilin 2009-11-19
  • 打赏
  • 举报
回复
楼主勇气可嘉
fengling2001 2009-11-19
  • 打赏
  • 举报
回复
利用下天河一号,因该没有问题
lzsh0622 2009-11-19
  • 打赏
  • 举报
回复
9楼的算法忽略了“不能重复”,没注意。因回复另一个贴子发现了这个问题。
改正后的代码如下:
public bool getAllString(string inputString, int len)
{
if (len > inputString.Length) { return false; }
try
{
Char[] chr = inputString.ToCharArray();

File.WriteAllText(@"C:\file0.txt", "", Encoding.Default);
for (int i = 0; i < len; i++) // 处理 i个字符长度的
{
StreamReader sr = new StreamReader(@"C:\file" + i + ".txt", Encoding.Default);
StreamWriter sw = new StreamWriter(@"C:\file" + (i + 1) + ".txt", false, Encoding.Default);
string str = "";
while (true)
{
str = sr.ReadLine();
if (str == null && i != 0) { break; }
if (i == 0) { str = ""; }
for (int j = 0; j < chr.Length; j++)
{
if (str.IndexOf(chr[j]) == -1) //保证不重复
{
sw.WriteLine(str + chr[j].ToString());
}
}
if (i == 0) { break; }
}
sr.Close();
sw.Close();
}
File.Delete(@"C:\file0.txt");
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); return false; }
return true;
}

// 测试用例
private void button1_Click(object sender, EventArgs e)
{
getAllString("abcdefghigklmnopABCDEFGHIGKLMNOPQRSTUVWXYZ/+-(", 4);
}

楼主测试一下,应该可以结贴了。
lzsh0622 2009-10-15
  • 打赏
  • 举报
回复
9楼算法说明:
(1)为了便于测试用了i个文件分别存结果
file1.txt 1个字符
file2.txt 2个字符
file3.txt 3个字符
.................

(2)读上一个文件的每行,分别加上chr[]中的每个字符,写到下一个文件。

(3)为了使结构更清晰,开始写了个空文件 file0.txt

(4)到第5位时,结果已经很大了。

平时设置8位密码,如果没规律,能累死计算机。 呵呵
lzsh0622 2009-10-14
  • 打赏
  • 举报
回复
在C#2005下测试通过

private void button1_Click(object sender, EventArgs e)
{
Char[] chr = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".ToCharArray(); // 自已再往里补充吧

File.WriteAllText(@"C:\file0.txt", "", Encoding.Default);
for (int i = 0; i < chr.Length; i++) // 处理 i个字符长度的
{
StreamReader sr = new StreamReader(@"C:\file" + i + ".txt", Encoding.Default);
StreamWriter sw = new StreamWriter(@"C:\file" + (i + 1) + ".txt", false, Encoding.Default);
string str = "";
while (true)
{
str = sr.ReadLine();
if (str == null && i != 0) { break; }
if (i == 0) { str = ""; }
for (int j = 0; j < chr.Length; j++)
{
sw.WriteLine(str + chr[j].ToString());
}
if (i == 0) { break; }
}
sr.Close();
sw.Close();
}
if (i == 3) break; //计算到第4位
}

// 测试结果
// 字符数 行数 字节数
// 1 62 186
// 2 3844 15376
// 3 238328 1191640
// 4 14776336 88658016 (84.5MB)

用了[0-9][a-z][A-Z]共62个字符,只测试到前4位,就84.5MB了。

如果再加上 @!&^%等等特殊字符,测试到60个字符长度,你想想需要多少硬盘能存下。

可以结贴了.
wangwanzhao1 2009-10-14
  • 打赏
  • 举报
回复
请问你要实现这个算法的目的是什么呢,没有看懂啊
lerit 2009-10-14
  • 打赏
  • 举报
回复
没听懂
赢光小虾米 2009-10-14
  • 打赏
  • 举报
回复
没有人回答我吗?
赢光小虾米 2009-10-14
  • 打赏
  • 举报
回复
那你可能出来帮我写一下啊!让我看看是什么样的一个算法
97ce_twinkle 2009-10-14
  • 打赏
  • 举报
回复
算法还是可以写的。

只是如1楼所说,无法真正运行实现而已。
赢光小虾米 2009-10-14
  • 打赏
  • 举报
回复
不会吧!这么恐怖。那解决方法是什么。这个算法怎么写了?
angel6709 2009-10-14
  • 打赏
  • 举报
回复
77万年那。。。小伙要暴力破解什么??这么不惜光阴哈。。
gomoku 2009-10-14
  • 打赏
  • 举报
回复
就算20个字符好了。

每秒打1万个,20个字符的全排列就要打77万年。

110,536

社区成员

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

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

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