PDA

View Full Version : تولید تمامی کلمات 8 حرفی بدون تکرار حروف



havakili
یک شنبه 20 اردیبهشت 1394, 17:42 عصر
با سلام به همه
من میخوام یه برنامه بنویسم که بتونه با حروف A,B,C,D,E,F,G,H تمامی کلمات 8 حرفی رو تولید کنه که تمامی این حروف داخلش باشه و بدون تکرار
مثلا ABCDEFGH یا ABCDEFHG همه حروف هستند و تکراری هم نیستند
لطفا دوستان راهنمائی کنند خیلی مهمه خیلی !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
لطفا کمک کنید تا حلش کنم
الگوریتم یا نمونه برنامه ای اگه در این مورد دارید ممنون میشم لطف کنید

rahnema1
یک شنبه 20 اردیبهشت 1394, 18:17 عصر
سلام
بفرمایید:

using System;

namespace Program
{
class Program
{
static void GeneratePermutations(String dic, string perms, int len)
{
if (perms.Length == len )
{
Console.WriteLine(perms);
return;
}

for (int i = 0; i < dic.Length; i++)
{
GeneratePermutations(dic.Remove(i, 1), perms + dic[i], len);
}
}
public static void Main(string[] args)
{
GeneratePermutations ("ABCDEFGH", string.Empty, 8);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

havakili
یک شنبه 20 اردیبهشت 1394, 21:42 عصر
با عرض سلام و تشکر خدمت rahnema1

من اگر بخوام طول رشته تولید رو برابر 12 کنم اونوقت تعداد حالت ها میشه 479001600 حالت
خوب من چه جوری میتونم این تعداد حالت ها را در مثلا 12 ترید جدا و جدا بدست بیارم که اولا زیاد طول نکشه ساخت همه حالت های ممکنه دوماً سیستم هم هنگ نکنه
باز هم متشکرم از لطفتون

rahnema1
یک شنبه 20 اردیبهشت 1394, 22:10 عصر
برنامه را یه کم تغییر دادم
حلقه ای که داخل Main قرار داره را می تونید بین thread ها تقسیم کنید
تعداد thread ها هم یکی کمتر از تعداد cpu ها بذارید تا سیستم هنگ نکنه

using System;

namespace Program
{
class Program
{
static void GeneratePermutations(String dic, string perms, int len)
{
if (perms.Length == len )
{
Console.WriteLine(perms);
return;
}
for (int i = 0; i < dic.Length ; i++)
{
GeneratePermutations(dic.Remove(i, 1), perms + dic[i], len);
}
}
public static void Main(string[] args)
{
string dic = "ABCDEFGH";
string perms = string.Empty;
int len = dic.Length;
for (int i = 0; i < dic.Length; i++)
{
GeneratePermutations(dic.Remove(i, 1), perms + dic[i], len);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}