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

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

سؤال

السلام عليكم

 

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

   

 

 

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

مثال :

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

والجواب هو 119748

 

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

 

post-259874-0-67842800-1380281409_thumb.

 

 

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

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

شارك هذا الرد


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

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

  • 0

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

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

//الكود بلغة جافا ... والجواب i, 119748public class third {    public static int thirdQuestion(int[]array)    {        int sum=0;        for(int i=0;i<array.length;i++)        {            if(array[i]%2==0)            {                for(int j=i+1;j<array.length;j++)                {                    if(array[j]%2==0)                    {                        sum+=gcd(array[i],array[j]);                        //System.out.println(array[i]+","+array[j]+"-->"+gcd(array[i],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[i]=2+i;        }        System.out.println(thirdQuestion(array));    }} 

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

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

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

تم تعديل بواسطه مصطفى 36a2
2

شارك هذا الرد


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

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

# result 119748def 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 resultdef 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 resultprint(get_sum(400))
1

شارك هذا الرد


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

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

هذا الكود مكتوب بلغة فيجوال بيسك 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 jNext ilbl.Caption = uEnd SubPrivate 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

شارك هذا الرد


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

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

محاولتي:

#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]=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[i] , array[j] );        }return s;}
تم تعديل بواسطه abdou001
1

شارك هذا الرد


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

#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

شارك هذا الرد


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

هذا هو الكود بلغة 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[i];					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

شارك هذا الرد


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

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

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



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

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

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