تولید تمام حالت های کاراکتر در سی شارپ
سلام خدمت همگی . من میخوام کاراکتر های abc رو در تمام حالت های خود بدون تکرار یا با تکرار در TextBox یا Richtextbox نمایش دهم . بطور مثال abc رو نظر بگیرید :
میخوام به این شکل در بیاد و خروجیش رو داخل ویندوز فرم سی شارپ نشون بدم ؛
abc
acb
bac
bca
......... و همینطور ادامش . ممنون میشم راهنماییم کنید .
5 پاسخ
سلام . خیلی ازتون ممنونم . نمیتونستم پیدا کنم .
یه زحمت میکشین کامنت میذارین که کد های بالا چیکار میکنن ؟
شرمنده که باعث زحمت شدم . ببخشید
حالا اگه بخوام بین 5 کاراکتر سه تا رو انتخاب کنم یا 4 یا 5 تا رو انتخاب کنم و بچرخونم چطوریه مهندس ؟ یکم راهنماییم کنید ممنون میشم .
بهتره اینجارو هم بخونید
http://forum.sito.ir/showthread.php?tid=14529
نه این فقط برا همون تعداد حروف که میدید برمیگردونه.برا اینکار خودتون باید یه الگوریتمی بنویسید که این کارو بکنه و به ترتیب جایگشت اونارو با کد بالا برگردونید.
جایگشت (به انگلیسی: Permutation) در قلمرو ترکیبیاتی آن به معنی مرتبسازی یا تغییر ترتیب اعضای یک مجموعه میباشد. ممکن است این چیدمان خطی یا غیر خطی (مثلاً دور یک دایره که در این حالت جایگشت دوری نامیده میشود) صورت گیرد. اعضای مجموعه نیز میتوانند هر چیزی باشند مثلاً شی یا عدد یا حرف و همچنین میتوانند تکراری باشند یا متمایز. در هر مورد، مهم، تعداد طرق چیدن این اعضا است.
منبع: ویکی پدیا
خب برا حل این مسئله نیاز به تعریف توابع بازگشتی داریم. میتونید نمونه کد زیر رو برا خودتون توسعه بدید.(روی فرم یه باتن بزارید با یه تکست باکس. خاصیت مولتی لاین تکست باکس رو فعال کنید)
private static void Swap(ref char a, ref char b) { if (a == b) return; a ^= b; b ^= a; a ^= b; } public void GetPer(char[] list) { int x = list.Length - 1; GetPer(list, 0, x); } private void GetPer(char[] list, int k, int m) { if (k == m) { string s = new string(list); textBox1.Text += s+ Environment.NewLine; } else for (int i = k; i <= m; i++) { Swap(ref list[k], ref list[i]); GetPer(list, k + 1, m); Swap(ref list[k], ref list[i]); } }
و روی باتن دابل کلیک کنید و کد زیر رو بنویسید.
string str = "abc"; char[] arr = str.ToCharArray(); GetPer(arr);
فقط مشکل الان اینجاست که یکی یکی تست نمیگیره . چون ABC رو باید از اول شروع کنه . مثلا بنویسه AB و BA و بعد ACوCA بره رو سه رقمی . با این کد نمیشه اینکارو کرد ؟! درسته ؟