السلام عليكم
أنا شبة يائسة في حل هذي المعضلة، أتمنى منكم المساعدة
معادلة التوفيق الرياضي:
n!/k!(n-k)!
if n= {1,2,3,4)
and
k=2
then
1,2
1,3
1,4
2,3
2,4
3,4
if k=3
1,2,3
1,2,4
2,3,4يوجد على النت أكواد كثيرة لحل هذة المسألة الرياضية
لكن أنا لا أريد ايجاد كل هذه المجموعات
أريد فقط حساب التوافيق للعنصر الأول مع بقية العناصر
1,2
1,3
1,4
في برنامجي map اسمها AssociatedItem على النحو التالي:
(1, {3, 4})(2, {3, 4})(3, {1, 2, 4})(4, {1,2,3, 4})(5, {1})وأريد لكل رقم ايجاد التوفيق الرياضي
لكل مجموعة على حدة
فمثلا
(1, {3, 4})if k=3ثم نوجد التوافيق لل 11,31,4نلاحظ، العناصر المرتبطة بالرقم 1 أقل من k
إذن اجعل k تساوي عدد العناصر المرتبطة بواحد، k=2
ثم ايجاد التوافيق للعد 2 وهكذا
وهذا الكود:
int k = 0; std::map <int, vector <int> > Kcom; int i = 1; for (const auto& p1 : AssociatedItem) { k=4; if (k > AssociatedItem[p1.first].size()) k = AssociatedItem[p1.first].size(); int count = 1; int c = 0; int j = AssociatedItem[p1.first].size(); while (c != j) { cout << AssociatedItem[p1.first].size(); cout << "\n"; while (count <= k) { Kcom.push_back(p1.second[c]); ++c; ++count; } ++i; // if j > k do //----- count = 1; } }البرنامج يعمل بشكل صحيح قي حالتين
إذا كنت عدد العناصر أصغر أو تساوي k
المشكلة لو كانت عدد العناصر أكبر من k
مثلا لو كانت k=3
وأردنا ايجاد التوافيق للعدد 4 من العناصر المرتبطة بها وهي
1,2,3,5
أي المطلوب ايجاد هذا الشكل:
1,2,3
1,2,5
في المرة الأولى:
Kcom[4]=1,2,3
لكن لم استطيع كتابة كود للخطوة الثانية
Kcom[5]=1,2,5
عوضا عنه البرنامج فقط يضع
Kcom[5]=5
وبما إن c= 5 رقم واحد ، وبما إني وصلت لاخر عنصر في المجموعة
وبالتالي
count <k
يدخل اللوب ويظهر خطأ
وحتى لو وضعت شرط
لو وصلت لنهاية المجموعة، اخرج من اللوب
أنا لا اريد تخزين الرقم 5 فقط وانما
1,2,5
الرجاء المساعدة، ولكم جزيل الشكر