PDA

View Full Version : سوال: یافتن تعداد حالت های برد افراد



faribaqafoori
شنبه 14 دی 1398, 21:00 عصر
سلام من میخوام با php یک کدی ینویسم ولی متاسفانه راهشو نمیدونم
موضوع اینه که در یک مسابقه چهار نفر در دو بازی با هم بازی دارند
بطور مثال:
علی و رضا رقیب یکدیگر هستند
محمد و حسین هم رقیب یکدیگر هستند
حالا در این مسابقه چهار حالت ممکنه پیش بیاد
حالت اول برد علی و محمد
حالت دوم برد رضا و حسین
حالت سوم برد علی و حسین
حالت چهارم برد رضا و محمد

و هیچ وقت علی و رضا و همین طور محمد و حسین نمیتونن همزمان برنده بشن چون در مقابل هم هستن از هر دو نفر یک نفر برنده میشه

حالا من میخوام بدونم اگر ۳۰ نفر در ۱۵ تا بازی باهم رقابت کنند چند حالت پیش میاد و اگه میشه حالت های مختلف رو هم بتونم لیست کنم مثلا در حالت اول آقایان a,b,c تا نفر پانزدهم و در حالت دوم آقایان فلان برنده میشوند
همچین کدی میخوام
اگر فکر میکنید میتونم تو گوگل پیدا کنم لطفا راهنمایی کنید باید چه عنوانی رو سرچ کنم
البته خودم php تا حدودی بلدم و اگر کدی بهم بدین ویرایش های لازم رو خودم میتونم انجام بدم ممنون

parsboy
یک شنبه 15 دی 1398, 07:44 صبح
سلام من میخوام با php یک کدی ینویسم ولی متاسفانه راهشو نمیدونم
موضوع اینه که در یک مسابقه چهار نفر در دو بازی با هم بازی دارند
بطور مثال:
علی و رضا رقیب یکدیگر هستند
محمد و حسین هم رقیب یکدیگر هستند
حالا در این مسابقه چهار حالت ممکنه پیش بیاد
حالت اول برد علی و محمد
حالت دوم برد رضا و حسین
حالت سوم برد علی و حسین
حالت چهارم برد رضا و محمد

و هیچ وقت علی و رضا و همین طور محمد و حسین نمیتونن همزمان برنده بشن چون در مقابل هم هستن از هر دو نفر یک نفر برنده میشه

حالا من میخوام بدونم اگر ۳۰ نفر در ۱۵ تا بازی باهم رقابت کنند چند حالت پیش میاد و اگه میشه حالت های مختلف رو هم بتونم لیست کنم مثلا در حالت اول آقایان a,b,c تا نفر پانزدهم و در حالت دوم آقایان فلان برنده میشوند
همچین کدی میخوام
اگر فکر میکنید میتونم تو گوگل پیدا کنم لطفا راهنمایی کنید باید چه عنوانی رو سرچ کنم
البته خودم php تا حدودی بلدم و اگر کدی بهم بدین ویرایش های لازم رو خودم میتونم انجام بدم ممنون
باسلام
ابتدا نياز است شما برنامه اي كه ميخوايد بنويسيد رو آنلايز كنيد و بصورت چارت براي خودتون رسم كنيد
به تعداد بازيكن ها ربطي ندارد بستگي دارد شما بخواي در 30 نفر چند نفر برنده بشند فقط كافيه اين رو بدونيد
براي مثال همان 30 نفر قرار است در 15 مسابقه شركت كنند خوب هر مسابقه بايد بدونيد چندتا برنده ميخواد و اينكه اون نفرات برنده رو بريزيد تو يك ديتابيس از هر مسابقه
سپس مسابقه بعدي اون تعداد برنده رو كم ميكني دوباره مسابقه انجام ميشه و دوباره مجداا برنده ها ميرن داخل ديتابيس !
اون چيزي كه شما ميخواي بدوني چند حالت پيش مياد دقيقا از طريق طراحي الگوريتم بدست مي آيد.

ASHKANLAEI
یک شنبه 15 دی 1398, 14:22 عصر
دوست عزیز شما فقط به یک تابع بازگشتی نیاز دارید.
شما اول بیاین و این کد رو در کدهاتون بنویسید:

function winners($a, $n, $bs) {
foreach ($a[$n] as $val) {
if (count($a) == $n + 1)
echo $bs . $val . "<br>";
else
winners($a, $n + 1, $bs . $val . ", ");
}
}سپس باید یک آرایه تعریف کنید که نام ها به شکل جفت جفت داخلش نوشته شده باشن (هر جفت بازیکن مقابل هم) مثل این:

$arr = [
[1, 2],
[3, 4],
[5, 6]
];حالا تنها کار لازم اینه که بیاین و این تابع رو فراخوانی کنید (پارامتر ها به ترتیب: نام آرایه، 0 (همیشه صفر) و یک رشته خالی (این هم همیشه خالیه!)):

winners($arr, 0, "");

peymang
دوشنبه 16 دی 1398, 01:01 صبح
https://github.com/milesj/tournament/blob/master/Lib/Tournament.php

https://www.phpclasses.org/package/11346-PHP-Organize-the-matches-of-teams-in-a-tournament.html#download

این دوتارو ببین

می تونی داخل گوگل هم سرچ کنی tournament bracket in php اگر نتیجه نگرفتی به زبان های دیگه سرچ کن شاید سرنخی دستتون اومد

ASHKANLAEI
دوشنبه 16 دی 1398, 09:58 صبح
دوست عزیز شما فقط به یک تابع بازگشتی نیاز دارید.
شما اول بیاین و این کد رو در کدهاتون بنویسید:

function winners($a, $n, $bs) {
foreach ($a[$n] as $val) {
if (count($a) == $n + 1)
echo $bs . $val . "(بزارین برای این ننوشتم که این ویرایشگر سایت خودکار پاکش میکنه br این جا تگ)";
else
winners($a, $n + 1, $bs . $val . ", ");
}
}سپس باید یک آرایه تعریف کنید که نام ها به شکل جفت جفت داخلش نوشته شده باشن (هر جفت بازیکن مقابل هم) مثل این:

$arr = [
[1, 2],
[3, 4],
[5, 6]
];حالا تنها کار لازم اینه که بیاین و این تابع رو فراخوانی کنید (پارامتر ها به ترتیب: نام آرایه، 0 (همیشه صفر) و یک رشته خالی (این هم همیشه خالیه!)):

winners($arr, 0, "");
پاسخی که در صفحه نشون داده میشه:

1, 3, 5
1, 3, 6
1, 4, 5
1, 4, 6
2, 3, 5
2, 3, 6
2, 4, 5
2, 4, 6
فقط دقت داشته باشید برای هر n جفت (در اینجا 3 جفت) به تعداد 2 به توان n حالت برد داریم. و از اون جایی که این کد از تابع بازگشتی استفاده کرده، پس برای مقادیر بالای 10 به مدت زمان زیادی احتیاج داره. (برای 30 جفت باید 32768 حالت رو بنویسه!)