• 0
أحمد أبو عبد البر

نتيجة السؤال الثاني من مسابقة الفريق العربي للبرمجة-2

سؤال

أعلن اليوم عن نتيجة السؤال الثاني وهي  137846528820

 

والفائزون هم 

 

post-259874-0-10301300-1379678322_thumb.

 

 

نرجو من المشاركين وضع مشاركاتهم لتتم الفائدة

تم تعديل بواسطه أحمد أبو عبد البر
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

12 إجابة على هذا السؤال .

  • 0

الحمد لله ...

بصراحة أول ما قمت بحل السؤال على الآلة الحاسبة للويندوز .. وذلك لأن المسألة هي مسألة Combinatorics أي طرق العد ..

المسألة بشكل مجرد : اختيار 20 خانة من أصل 40 .. (وذلك لأنه لا داعي لاختيار العشرين الأخرى فهي إجبارية )
وهذا يعني  40C20 وهي عملية رياضية بحتة ناتجها هو 40! مقسوماً على (20! * 20! )  
ومن أجل تعميم المسألة : nCk   تساوي : n!  مقسوماً على !(k! * (n-k 
ولكن وفقاً لشروط المسابقة فهذا هو الكود : 

 import java.math.BigInteger; public class secind {public static BigInteger factorial(int x){BigInteger X=new BigInteger(Integer.toString(x));while(x!=0){X=X.multiply(new BigInteger(Integer.toString(x)));x--;}return X;}public static void main(String[] args) {System.out.println(factorial(40).divide(factorial(20).multiply(factorial(20))));} } 

والحمد لله رب العالمين ...

ملاحظة : أنا درست الcombinatorics  من سلسلة عن الdiscrete mathematics  للدكتور Arthur Benjamen  (يهودي للأسف )   وهي 25 فيديو موجوده على الرابط التالي ... أتمنى أن تستفيدو منها فهي بحق رائعة ..
والله ولي التوفيق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

long long calc(int y,int x)

{

if(y==0 || x==0)

return 1;

if(x==1 && y==1)

return 2;

if(y==1)

return 1+calc(y,x-1);

long long first = 1+ calc(1,x-1);

for(int i=2;i<=y;i++)

first += calc(i,x-1);

return first;

}

//137846528820

تم تعديل بواسطه abdou001
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

Dim n, r, d As Double

Private Sub cmd_Click()

lbl.Caption = combin(40, 20)

End Sub

Private Function combin(n As Double, r As Double) As Double

combin = fact(n) / (fact(r) * fact(n - r))

End Function

Public Function fact(n As Double) As Double

d = 1

For i = 1 To n

d = d * i

Next i

fact = d

End Function

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

def getList(entry):

result = []

a = entry

while a > 0:

c = a

res = 0

while c >= 0:

res += c

c -= 1

result.append(res)

a -= 1

return result

def getResult(entry):

result = 0

for i in entry:

result += i

return result

def get_total(entry):

result = []

for i in range(len(entry)):

tmp = 0

for a in entry[i:]:

tmp += a

result.append(tmp)

return result

def get_combinations(strLength):

if not (strLength % 2) == 0:

return 0

elif strLength == 2:

return 2

elif strLength == 4:

return 6

else:

length = int(strLength / 2) + 1

result = getList(length)

for i in range(length - 4):

result = get_total(result)

return getResult(result)

print(get_combinations(40))

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

//--------------------------------------

//Language : C#

//Full Name : Abdelalim ZERKANI

//Solution : 137846528820

//--------------------------------------

//Factorial

double fact(int n)

{

if (n == 0)

return 1;

else

return n * fact(n - 1);

}

double C(int n, int p)

{

//MessageBox.Show("n: " + n + " fact n - p: " + fact(n - p));

return fact(n)/(fact(p)*(fact(n-p)));

}

double getNumber(int zeroNbr = 20,int oneNbr = 20)

{

return C(zeroNbr + oneNbr, zeroNbr);

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يا سلام

 

وانا كنت عم بحاول اعمل مصفوفة احفظ فيها كل الارقام الصالحة ويطلع انو بدكم ياه بس عدد الارقام الصالحة؟؟؟ :wub:

 

يا ديعان 30 فنجان قهوة اللي شربتهم وانا بحاول :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخ سامر  .. في العادة تكون الأسئلة عن إيجاد عدد الاحتمالات .. ويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا )  فمجرد التفكير بوجود عدد من الحروف ( وليس السلاسل حتى ) بنفس عدد الاحتمالات أمر خيالي :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا)

- التالي سيكون سؤال يحتم عليك التحقق من جميع الإحتمالات الممكنة :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

- التالي سيكون سؤال يحتم عليك التحقق من جميع الإحتمالات الممكنة :D

انا رايح احضر القهوة  :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا ) 

طريقة التفكير والخوارزمية المستعملة وطريقة التطبيق سوف تجعل الجواب احلي :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

#include <stdio.h>

#include <stdlib.h>

#define ull unsigned long long

ull loz[40][40][40] = {{{0}}};

ull calc(int length, int ones, int zeroes)

{

ull n = 0;

if(length == 1)

return 1;

if(ones > 0) {

if(!loz[length - 1][ones - 1][zeroes])

loz[length - 1][ones - 1][zeroes] = calc(length - 1, ones - 1, zeroes);

n += loz[length - 1][ones - 1][zeroes];

}

if(zeroes > 0) {

if(!loz[length - 1][ones][zeroes - 1])

loz[length - 1][ones][zeroes - 1] = calc(length - 1, ones, zeroes - 1);

n += loz[length - 1][ones][zeroes - 1];

}

return n;

}

void main() {

printf("%llu\n", calc(40, 20, 20));

system("pause");

}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جيد يا مصطفى....

للأسف أنا لم أحاول حتى أن أفكر في حل رياضي, قد يؤلمني رأسي ان فعلت  :wacko: ,,,

لذلك دالة تراجعية بسيطة + تخزين النتائج لتفادي التكرار و الى الأمام  :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .