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

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

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

السلام عليكم

 

كان السؤال الأول 

   

 

 

أكتب دالة تأخذ وسيط مصفوفة مكونة من 400 عنصر من 2 إلى 401 وتعيد مجموع القواسم المشترك الأكبر للأرقام الزوجية مثنى مثنى

مثال :

2,4 = 22,6 = 24,6 = 24,8 = 4...
2+2+2+4+ ... = الناتج النهائي

والجواب هو 119748

 

ولقد وفق المشاركون التالون في حله

 

post-259874-0-67842800-1380281409_thumb.

 

 

نرجو من الاخوة الفائزين وضع اكوادهم ولا باس بشيء من الشرح حتى نستفيد

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

1

vVIfFr.gif

مدونتي



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

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

 

http://www.tvquran.com/

 

LoGeCom

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

#2

الحمد لله .. بارك الله فيك أخ أحمد ..

هذا هو الكود وهو بلغة Java

//الكود بلغة جافا ... والجواب i, 119748public class third {    public static int thirdQuestion(int[]array)    {        int sum=0;        for(int i=0;i<array.length;i++)        {            if(array%2==0)            {                for(int j=i+1;j<array.length;j++)                {                    if(array[j]%2==0)                    {                        sum+=gcd(array,array[j]);                        //System.out.println(array+","+array[j]+"-->"+gcd(array,array[j]));                    }                }            }        }        return sum;    }    private static int gcd(int i, int j) {        int k;        if(i==j)            return i;        else if(j==0)            return i;        if(i<j)        {            k=j;j=i;i=k;        }        return gcd(j,i%j);    }    public static void main(String[]args)    {        int[]array=new int[400];        //answer throw 2 --> 401 is 119748        for(int i=0;i<array.length;i++)        {            array=2+i;        }        System.out.println(thirdQuestion(array));    }}

الفكرة هي بإيجاد القاسم المشترك الأكبر بين كل عددين زوجيين (وهذا بداخل حلقتين for )

تقوم الدالة الرئيسية main  بـــإنشاء المصفوفة المطلوبة .. (الأعداد من 1 إلى 401 )

أما الدالة التي تجيب عن السؤال ففيها حلقتان ندخل إلى الثانية عندما نصادف عدد زوجي في الأولى .. ونبدأ من الرقم التالي(حتى لا نأخذ gcd العدد مع ذاته )
وعندما نصادف عدد زوجي في الحلقة الثانية نحسب القاسم المشترك الأكبر للعددين ونضيف الناتج للمجموع الكلي
والحمد لله رب العالمين

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 27 سبتمبر 2013 في 18:23

2
#3

السلام عليكم
هذه محاولتي

# result 119748

def big_div(first,second):
	result = []
	if first < second:
		a = first
	else:
		a = second
	for i in range(2, a + 1):
		if first % i == 0 and second % i == 0:
			result = i
	return result


def get_sum(entry):
    
    result = 0
    a = 2
    c = 4
    while a < entry:
        while c <= entry:
            result += big_div(a, c)
            c += 2
        a += 2
        c = a + 2
    return result

print(get_sum(400))
1
#4

السلام عليكم ورحمة الله وبركاته

هذا الكود مكتوب بلغة فيجوال بيسك 6

Private Sub cmd_find_Click()
For i = 2 To 401 Step 2
    For j = 2 To 401 Step 2
        If i <> j And i > j Then
                u = u + Gcd(i, j)
        End If
    Next j
Next i
lbl.Caption = u
End Sub
Private Function Gcd(ByVal x As Integer, ByVal y As Integer) As Integer
   Dim tmp As Long
    Do
        If x < y Then
            tmp = x
            x = y
            y = tmp
        End If
        x = x Mod y
    Loop While x
    Gcd = y
    End Function
1
#5

السلام عليكم و رحمة الله

محاولتي:

#include <iostream>using namespace std;///////////////////////////////////////////int gcd(int a,int b);int calc(int array[],size_t size);void init(int array[],size_t size);////////////////////////////////////////////int main(){const size_t size = 400;int array[size];init(array,size);cout << calc(array,size) << endl;return 0;}//////////////////////////////////////////void init(int array[],size_t size){for(int i=0;i<size;i++)    array=i+2;}///////////////////////////////////int gcd(int a,int b){if(a==b)    return a;if(a>b)    return gcd(b,a-b);if(b>a)    return gcd(a,b-a);}////////////////////////////////////int calc(int array[],size_t size){int s=0;for(int i=0;i<size;i++)    {    for(j=i+1 ; j<size ;j++)        s += gcd( array , array[j] );        }return s;}

تم تعديل هذه المشاركة بواسطة abdou001 في 28 سبتمبر 2013 في 12:02

1
#6

#include <stdio.h>

#include <stdlib.h>

int gcd_sum(int numbers[400])

{

int i, j, gcd, sum = 0;

for(i = 0; i < 399; i += 2) {

for(j = i + 2; j < 399; j += 2) {

gcd = (numbers < numbers[j])? numbers : numbers[j];

while((numbers%gcd) || (numbers[j]%gcd))

gcd -= 2;

sum += gcd;

}

}

return sum;

}

void main() {

int i, numbers[400];

for(i = 0; i<400; i++)

numbers = i + 2;

printf("%d\n", gcd_sum(numbers));

system("pause");

}

1

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

#7

هذا هو الكود بلغة C++

#include<iostream.h>int one(int x, int y){	if (y > x)	 one(y,x);	else if (y == 0)	 return x;	else if (y > 0)	 one( y, (x % y) );}long int mosap(int k[]){int y[200],h=0;for(int l=0;l<400;l+=2){y[h]=k[l];h++;}long int o=0;int temp1,temp2;for(int i=0;i<200;i++){					for(int j=i+1;j<200;j++){					temp1=y;					temp2=y[j];					o+= one(temp1,temp2);   }}cout<<endl;return o;}void main(){int array[400];for (int t=0;t<400;t++){array[t]=t+2;}cout<<mosap(array);}
1

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…