الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه أحمد أبو عبد البر في 20 سبتمبر 2013 · 12 رد · 1,644 مشاهدة · في المسابقات البرمجية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

والفائزون هم 

 

post-259874-0-10301300-1379678322_thumb.

 

 

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

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 20 سبتمبر 2013 في 16:12

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#2

الحمد لله ...

بصراحة أول ما قمت بحل السؤال على الآلة الحاسبة للويندوز .. وذلك لأن المسألة هي مسألة 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
#3

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 في 20 سبتمبر 2013 في 16:51

1
#4

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

#5

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))

#6

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

//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);

}

#7

يا سلام

 

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

 

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

Samir Ibrahim

VFP Blog

VB.NET Blog

#8

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

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

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

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#10
ahmedsaoud31 كتب:

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

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

Samir Ibrahim

VFP Blog

VB.NET Blog

#11
مصطفى 36a2 كتب:

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

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

Samir Ibrahim

VFP Blog

VB.NET Blog

#12

#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");

}

[سبحان الله و بحمده, سبحان الله العظيم]

#13

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

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

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

[سبحان الله و بحمده, سبحان الله العظيم]

مواضيع مشابهة