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

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

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

سلام عليكم

 

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

 

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

 

 

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

 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

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 11 أكتوبر 2013 في 23:43

1

vVIfFr.gif

مدونتي



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

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

 

http://www.tvquran.com/

 

LoGeCom

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

#2

ها جوابي

//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=46375267

using 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];
                                }

                            }
                        }

                    }
                }

            }

        }
    }
}
#3

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

هذه هو حلي .. كان يجدر بي استخدام العودية ولكن بسبب الكسل (وقلة الحدود في المسألة .. استخدمت بضعة حلقات 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);        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,op[j],op[k],op[l],op[m],op[n]);                            if(buf[6]==ans)                            {                                printf("%c %c %c %c %c %c\t",op,op[j],op[k],op[l],op[m],op[n]);                                printf("%lld\n",                                    O(                                    O(                                    O(                                    O(                                    O(                                    O(b[0],b[1],op),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;}

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

#4

السلام عليكم

الحل

//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 = numbers;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,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=='/' && numbers==0)		return false;	s = chooseOperation(s,numbers,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='+';		}}
#5

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

}

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

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