أعلن اليوم عن نتيجة السؤال الثاني وهي 137846528820
والفائزون هم
نرجو من المشاركين وضع مشاركاتهم لتتم الفائدة
أعلن اليوم عن نتيجة السؤال الثاني وهي 137846528820
والفائزون هم
نرجو من المشاركين وضع مشاركاتهم لتتم الفائدة
تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 20 سبتمبر 2013 في 16:12
إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة
فما أحوجني إلى دعوة صالحة من أخ لي كريم
أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز
الحمد لله ...
بصراحة أول ما قمت بحل السؤال على الآلة الحاسبة للويندوز .. وذلك لأن المسألة هي مسألة 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 فيديو موجوده على الرابط التالي ... أتمنى أن تستفيدو منها فهي بحق رائعة ..
والله ولي التوفيق
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
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
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))
//--------------------------------------
//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);
}
يا سلام
وانا كنت عم بحاول اعمل مصفوفة احفظ فيها كل الارقام الصالحة ويطلع انو بدكم ياه بس عدد الارقام الصالحة؟؟؟ :wub:
يا ديعان 30 فنجان قهوة اللي شربتهم وانا بحاول :lol:
أخ سامر .. في العادة تكون الأسئلة عن إيجاد عدد الاحتمالات .. ويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا ) فمجرد التفكير بوجود عدد من الحروف ( وليس السلاسل حتى ) بنفس عدد الاحتمالات أمر خيالي :)
اقتباسويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا)
- التالي سيكون سؤال يحتم عليك التحقق من جميع الإحتمالات الممكنة :D
لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق
لا إله إلا أنت سبحانك إني كنت من الظالمين
ahmedsaoud31 كتب:- التالي سيكون سؤال يحتم عليك التحقق من جميع الإحتمالات الممكنة :D
انا رايح احضر القهوة :lol:
مصطفى 36a2 كتب:أويستحيل كتابة برنامج لكتابة كل الاحتمالات (غالبا )
طريقة التفكير والخوارزمية المستعملة وطريقة التطبيق سوف تجعل الجواب احلي :)
#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");
}
[سبحان الله و بحمده, سبحان الله العظيم]
جيد يا مصطفى....
للأسف أنا لم أحاول حتى أن أفكر في حل رياضي, قد يؤلمني رأسي ان فعلت :wacko: ,,,
لذلك دالة تراجعية بسيطة + تخزين النتائج لتفادي التكرار و الى الأمام :D
[سبحان الله و بحمده, سبحان الله العظيم]