PDA

View Full Version : سوال: ترکیب و چیدن عدد پشت سر هم



milad rezae
یک شنبه 20 مهر 1393, 12:03 عصر
سلام خدمت دوستان عزیز
من هر چی فک می کنم در مورد الگوریتم زیر چیزی به ذهنم نمی رسه و برای پروژه دانشگاه لازم دارم خواهش می کنم کمکم کنید
در این برنامه من 6 عدد label دارم که می خواهم اعداد 1 تا 5 را در آنها بچینم به طوری که در هر label فقط یک عدد و هر عدد هم یکبار بیشتر تکرار نشه... می خواهم برنامه ای بنویسم که تمام حالات ممکن که 720 تا می باشد را برایم تولید کنه... ممنون میشم کمکم کنید

juza66
یک شنبه 20 مهر 1393, 12:11 عصر
سلام


شما 6 عدد لیبل دارید

|

می خواهید عدد 1 - 2 - 4 - 5 رو تویی 5 لیبل نمایش بدید (لیبل 6 خالیه تا اینجا)

|

هر عدد فقط یکبار در لیبل نمایش داده شود

|

عدد تکراری نباشد؟

|

حالا شما 720 عدد می خواهید تولید شود که تکراری نباشند و تویی یک لیبل نمایش داده شوند
هر لیبل هم فقط یک عدد نمایش دهد؟

اینجا مبهمه لطفا روشن تر کنید مبحثتون رو

milad rezae
یک شنبه 20 مهر 1393, 15:03 عصر
نه 720 تا عدد نمی خواهم... می خام تمام حالت های ممکن که می توان اعداد 1 تا 5 را در 6 لیبل یا همان جایگاه قرار داد را بدست آورم... منظورم همان ترکیبات در ریاضیه که می خام برنامشا بنویسم... هر عدد فقط یکبار تکرار میشه پس هر دفعه یه لیبل خالی می مونه

gerdioz
یک شنبه 20 مهر 1393, 15:28 عصر
در این برنامه من 6 عدد label دارم که می خواهم اعداد 1 تا 5 را در آنها بچینم

1 تا 5 5 تا میشه چطور تو 6 تا لیبل می خوای یچینی ؟

اگه منظورت اینه ؟
تمام حالات ممکن برای ایجاد یک عدد پنچ رقمی شامل اعداد یک تا پنج بدون تکرار هست ؟

milad rezae
یک شنبه 20 مهر 1393, 15:33 عصر
خب یه لیبل خالی می مونه هر دفه

gerdioz
یک شنبه 20 مهر 1393, 15:38 عصر
واسه چی خالی می مونه ؟ 5 تا لیبل بزار واسه پنج تا عدد خب یوالت گنگه عزیز

hamid_hr
یک شنبه 20 مهر 1393, 15:51 عصر
خب ببینین شما یه الگوریتم بگین که بیاد تمام ترکیبات یه رشته 6 حرفی رو برگردونه بنده خدا به جوابش میرسه

gerdioz
یک شنبه 20 مهر 1393, 16:42 عصر
ببین این بدردت می خوره اگه مشکا داره بگو درستش کنم
124476

hamid_hr
یک شنبه 20 مهر 1393, 16:47 عصر
برا 6 حرف میشه 720 حالت
برا 5 حرف 120 حالت
مال شما 16 حالتو نشون میده

gerdioz
یک شنبه 20 مهر 1393, 16:49 عصر
شما با 5 حرف بدون تکرار چطور 120 حالت دارید ؟

gerdioz
یک شنبه 20 مهر 1393, 16:54 عصر
شما خروجی تون رو می خواهید بدون تکرار باشه
یـــــــا
اعداد استفاده شده بدون تکرار باشه ؟

hamid_hr
یک شنبه 20 مهر 1393, 17:01 عصر
خروجی با 5 حرف میشه
5 * 4 * 3 * 2 * 1 = 120
البته اگه حروف تکراری نباشه

gerdioz
یک شنبه 20 مهر 1393, 17:21 عصر
سوالم و دوباره می پرسم

شما خروجی تون رو می خواهید بدون تکرار باشه
یـــــــا
اعداد استفاده شده بدون تکرار نــــباشه ؟

hamid_hr
یک شنبه 20 مهر 1393, 17:28 عصر
ورودی 1 2 3 4 5
خروجی هم طبیعتا بدون تکرار میشه

milad rezae
دوشنبه 21 مهر 1393, 10:54 صبح
این یه مساله تحقیق در عملیاته... ما 6 تا جایگاه برای 5 کارگاه داریم که باید کارگاه ها را جوری در جایگاه ها بچینیم که هزینه هامون حداقل بشه... و طبیعتا 1 جایگاه خالی می مونه...برای حل این مساله 720 حالت داریم (2*3*4*5*6) که من می خام تمام این حالت ها را با یه برنامه بدست بیارم... از جواب هاتون ممنونم لطفا دوباره کمک کنید...

elec60
دوشنبه 21 مهر 1393, 11:13 صبح
راه حل ریاضی:

از ۶ عدد لیبل ۵ تا انتخاب میکنیم، تعداد حالات میشه ترکیب ۵ از ۶ که میشه ۶ حالت
حالا اعداد ۱ تا ۵ را در ۵ لیبل انتخاب شده قرار میدیم، تعداد حالات میشه جایگشت ۵ عدد که میشه ۱۲۰

طبق اصل ضرب کل حالات میشه ۶ ضربدر ۱۲۰ که میشه ۷۲۰

برنامه هم مشکل نیست، صبونه رو بزنم مینویسم:لبخند:

milad rezae
دوشنبه 21 مهر 1393, 11:17 صبح
دمت گرم به شدت ممنون :لبخند:

elec60
دوشنبه 21 مهر 1393, 22:05 عصر
static List<List<int>> comb;
static bool []used;
static void GetCombinationSample()
{
int[] arr = { 1, 2, 3, 4, 5 };
used = new bool[arr.Length];
used.Fill(false);
comb = new List<List<int>>();
List<int> c = new List<int>();
GetComb(arr, 0, c);
foreach (var item in comb)
{
foreach (var x in item)
{
Console.Write(x + ",");
}
Console.WriteLine("");
}
}
static void GetComb(int[] arr, int colindex, List<int> c)
{


if (colindex >= arr.Length)
{
comb.Add(new List<int>(c));
return;
}
for (int i = 0; i < arr.Length; i++)
{
if (!used[i])
{
used[i] = true;
c.Add(arr[i]);
GetComb(arr, colindex + 1, c);
c.RemoveAt(c.Count - 1);
used[i] = false;
}
}
}

elec60
دوشنبه 21 مهر 1393, 22:10 عصر
این کد رو از StackOverflow برداشتم، میتونی ازش استفاده کنی و تو لیبل هات اعداد یک تا ۵ رو قرار بدی، از شش تا لیبل هر دفعه یکیشو کنار بزار و اعداد یک تا ۵ رو تو بقیه قرار بده.
البته باید هر دفعه شش تا لیبل بسازی و Location شونو طوری تغییر بدی که ردیفی زیر هم قرار بگیرن و به نظر بیاد که لیبلها تغییر نمیکنن و فقط Text اونها تغییر میکنه.
دسترسی به VS ندارم تا خودم بنویسم.

milad rezae
پنج شنبه 01 آبان 1393, 10:31 صبح
واقعا دمت گرم :تشویق:

javane_pishtaz
سه شنبه 20 اردیبهشت 1401, 15:14 عصر
static List<List<int>> comb;
static bool []used;
static void GetCombinationSample()
{
int[] arr = { 1, 2, 3, 4, 5 };
used = new bool[arr.Length];
used.Fill(false);
comb = new List<List<int>>();
List<int> c = new List<int>();
GetComb(arr, 0, c);
foreach (var item in comb)
{
foreach (var x in item)
{
Console.Write(x + ",");
}
Console.WriteLine("");
}
}
static void GetComb(int[] arr, int colindex, List<int> c)
{


if (colindex >= arr.Length)
{
comb.Add(new List<int>(c));
return;
}
for (int i = 0; i < arr.Length; i++)
{
if (!used[i])
{
used[i] = true;
c.Add(arr[i]);
GetComb(arr, colindex + 1, c);
c.RemoveAt(c.Count - 1);
used[i] = false;
}
}
}



سلام و احترام ببخشید این" کد " به چه زبان و پلتفرمی هست .. ممکنه راهنمایی کنید