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

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

سؤال

سلام عليكم

 

نأسف على التأخر

 

كان السؤال الخامس هو

 

 

 العمليات الحسابية أربع الضرب والقسمة والجمع والطرح   المطلوب هو أن تملأ الفراغ بين كل عددين بالعملية المناسبة للحصول على الناتج التالي  

 8541   845   7415  415   15   852   85145 = 46375267    

  ثم بعد الحصول على العمليات الست ضعها بترتيبها في الفراغات التالية   

8961   412   665   4215   412   62   9514 = ؟     

وأرسل الناتج كنتيجة نهائية (النتيجة عدد عشري بسبعة أرقام بعد الفاصلة)   تنبيه مهم نحسب من اليسار إلى اليمين ولا أولوية لعملية على أخرى أي أن أولوية الضرب والقسمة على الجمع والطرح ملغاة  

  مثال لنفرض أن العمليات المناسبة هي كالتالي

  8541 + 845 * 7415 / 415 * 15 + 852 - 85145  

سيكون الناتج هو حاصل العمليات التالية  

8961 + 412 * 665 / 4215 * 412 + 62 - 9514

  والجواب هو 5513936,5825243

 
ومن كانت إجابته 5513880 
فإجابته مقبولة لأنه جعل دالة العمليات ترجع بعدد صحيح اتباعا للأصل النتيجة والخطأ مني أني لم أحدد أن النتيجة عشرية
 
وقد تمكن كل من هؤلاء من الإجابة الصحيحة
 

مصطفى 36a2

 

zaraki_kenpache

 

abdou001

 

zetrix

 

khatibe_30

 

samir ibrahim

 

 

 

يجدر التنبيه إلى أن المركز الأول هو من نصيب الأخوين abdou001 و مصطفى 36a2

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

شارك هذا الرد


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

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

  • 0

ها جوابي

//the output is ://8541+845-7415*415/15*852-85145=46375267//Press any key to continue . . .//so the result is( + - * /* -)//and you can try this ((((((8541+845)-7415)*415)/15)*852)-85145)=46375267 from lift to right as you say//لان الاولوية ملغاة فهذا الجواب الوحيد//8541+845=9386//9386-7415=1971//1971*415=817965//817965/15=54531//54531*852=46460412//46460412-85145=46375267using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication5{    class Program    {        static void Main(string[] args)        {            Int64[] number = { 8541, 845, 7415, 415, 15, 852, 85145 };//there are no zero             Int64 FainalResult = 46375267;            Int64 result = number[0];//=8541 because there are no zero            for (Int64 i = 1; i < 5; i++)            {                for (Int64 j = 1; j < 5; j++)                {                    for (Int64 k = 1; k < 5; k++)                    {                        for (Int64 l = 1; l < 5; l++)                        {                            for (Int64 m = 1; m < 5; m++)                            {                                for (Int64 n = 1; n < 5; n++)                                {                                    char[] AllOperators = { '*', '*', '*', '*', '*', '*' };                                    Int64[] operator2 = { i, j, k, l, m, n };                                    for (Int64 r = 0; r < 6; r++)                                    {                                        switch (operator2[r])                                        {                                            case 1:                                                { result = result * number[r + 1]; AllOperators[r] = '*'; }                                                break;                                            case 2:                                                { result = result / number[r + 1]; AllOperators[r] = '/'; }                                                break;                                            case 3:                                                { result = result + number[r + 1]; AllOperators[r] = '+'; }                                                break;                                            case 4:                                                { result = result - number[r + 1]; AllOperators[r] = '-'; }                                                break;                                        }                                    }                                    if (result == FainalResult)//if rusult=46375267                                    {                                        Console.Write(number[0].ToString());                                        for (int x = 0; x < 6; x++)                                        {                                            Console.Write(AllOperators[x].ToString() + number[x + 1].ToString());                                        }                                        Console.WriteLine("=" + result.ToString());//8541+845-7415*415/15*852-85145=46375267                                    }                                    result = number[0];                                }                            }                        }                    }                }            }        }    }}
0

شارك هذا الرد


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

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

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

//الحمد لله :)#include<cstdio>long long ans=46375267;long long a[7]={8541,845,7415,415,15,852,85145};long long b[7]={8961,412,665,4215,412,62,9514};char op[]={'+','-','*','/'};long long O(long long a,long long b,char c){    switch(c)    {    case '+' :return a+b;    case '-' :return a-b;    case '*' :return a*b;    case '/' :return a/b;//b can't be zero :)    }}int main5(){    long long buf[7]={a[0]};    for(int i=0;i<4;i++)    {        buf[1]=O(buf[0],a[1],op[i]);        for(int j=0;j<4;j++)        {            buf[2]=O(buf[1],a[2],op[j]);            for(int k=0;k<4;k++)            {                buf[3]=O(buf[2],a[3],op[k]);                for(int l=0;l<4;l++)                {                    buf[4]=O(buf[3],a[4],op[l]);                    for(int m=0;m<4;m++)                    {                        buf[5]=O(buf[4],a[5],op[m]);                        for(int n=0;n<4;n++)                        {                            buf[6]=O(buf[5],a[6],op[n]);                            //printf("%c %c %c %c %c %c\t",op[i],op[j],op[k],op[l],op[m],op[n]);                            if(buf[6]==ans)                            {                                printf("%c %c %c %c %c %c\t",op[i],op[j],op[k],op[l],op[m],op[n]);                                printf("%lld\n",                                    O(                                    O(                                    O(                                    O(                                    O(                                    O(b[0],b[1],op[i]),b[2],op[j]),b[3],op[k]),b[4],op[l]),b[5],op[m]),b[6],op[n])                                    );                            }                            //printf("%lld\n",buf[6]);                        }                    }                }            }        }    }    return 0;}

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

0

شارك هذا الرد


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

السلام عليكم

الحل

//5513880//c++#include <iostream>using namespace std;typedef long long LLONG; LLONG chooseOperation(LLONG a,LLONG b,char op);LLONG add(LLONG a,LLONG b);LLONG sub(LLONG a,LLONG b);LLONG multp(LLONG a,LLONG b);LLONG div(LLONG a,LLONG b);bool test(LLONG numbers[],char *opr,LLONG result);LLONG calc(LLONG numbers[],char *op,LLONG result,LLONG numbers2[]);void switchOp(char *opr,int pos);int main(){char finalSet[6];char opr[7]="++++++";LLONG numbers[]={8541,845,7415,415,15,852,85145};LLONG numbers2[]={8961,412,665,4215,412,62,9514};LLONG result = 46375267;cout << calc(numbers,opr,result,numbers2) <<endl;return 0;}//////////////////////////////////////////////////LLONG chooseOperation(LLONG a,LLONG b,char op){switch(op)	{	case '+' : 		return add(a,b);	case '-' :		return sub(a,b);	case '*' :		return multp(a,b);	default:		return div(a,b);	}}//////////////////////////////////////////////////LLONG add(LLONG a,LLONG b)	{	return a+b;	}LLONG sub(LLONG a,LLONG b)	{	return a-b;	}LLONG multp(LLONG a,LLONG b)	{	return a*b;	}	LLONG div(LLONG a,LLONG b)	{	return a/b;	}////////////////////////////////////////////LLONG calc(LLONG numbers[],char *opr,LLONG result,LLONG numbers2[]){LLONG z = result;LLONG nCopy[7];for(int i=0;i<7;i++)	nCopy[i] = numbers[i];char op[]="+-*/";int pos,oprP;pos = 0;	while(!test(numbers,opr,result))	{	switchOp(opr,pos);	}	LLONG s = numbers2[0];for(int i=1;i<7;i++)	s = chooseOperation(s,numbers2[i],opr[i-1]);	return s;}///////////////////////////////////////////////bool test(LLONG numbers[],char *opr,LLONG result){LLONG s = numbers[0];for(int i=1;i<7;i++)	{	if(opr[i]=='/' && numbers[i]==0)		return false;	s = chooseOperation(s,numbers[i],opr[i-1]);	}	return s==result;}//////////////////////////////////////////void switchOp(char *opr,int pos){		if(opr[pos]=='+')		opr[pos]='-';	else if(opr[pos]=='-')		opr[pos]='*';	else if(opr[pos]=='*')		opr[pos]='/';	else if(opr[pos]=='/')		{		switchOp(opr,++pos);		if(opr>0)		for(int i=0;i<pos;i++)			opr[i]='+';		}}
0

شارك هذا الرد


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

//solution: 5513936,5825243

//Language: C

#include <stdio.h>

#include <stdlib.h>

double nbrs[] = {845, 7415, 415, 15, 852, 85145};

double nbrs2[] = {412, 665, 4215, 412, 62, 9514};

char ops[6] = {0};

void calc(int level, double result, int * gotit)

{

double res = 0;

if(level == 6){

if(result == 46375267)

*gotit = 1;

return;

}

ops[level] = '+';

res = result + nbrs[level];

calc(level +1, res, gotit);

if(*gotit) return;

ops[level] = '-';

res = result - nbrs[level];

calc(level +1, res, gotit);

if(*gotit) return;

ops[level] = '*';

res = result * nbrs[level];

calc(level +1, res, gotit);

if(*gotit) return;

ops[level] = '/';

res = result / nbrs[level];

calc(level +1, res, gotit);

if(*gotit) return;

}

void main() {

int gotit = 0;

double result = 8541;

calc(0, result, &gotit);

result = 8961;

for(gotit = 0; gotit < 6; gotit++){

switch(ops[gotit]){

case '+':result += nbrs2[gotit];break;

case '-':result -= nbrs2[gotit];break;

case '*':result *= nbrs2[gotit];break;

case '/':result /= nbrs2[gotit];break;

}

}

printf("%.7f\n", result);

system("pause");

}

0

شارك هذا الرد


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

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

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



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

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

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