| ²é¿´: 594 | »Ø¸´: 0 | |||
ju5200ľ³æ (ÕýʽдÊÖ)
|
[ÇóÖú]
C++ʵÏÖ24µã¼ÆËãµÄ´úÂëÄÄλ´ó¸çÄܰïæ½âÊÍһϰ¡£¿¿Î³ÌÉè¼Æ£¬¿ì¼±ËÀÁË,Íò·Ö¸Ðл°¡£¡
|
|
#include<iostream> using namespace std; #include<string> #include<stdlib.h> const double PRECISION = 1E-6; //¾«¶È³£Á¿ const int COUNT_OF_NUMBER = 4; //Ëã24µãµÄ×ÔÈ»Êý¸öÊý const int NUMBER_TO_BE_CAL = 24; void Swap(int &m,int &n) { int x; x=m; m=n; n=x; } class RationalNumber //¶¨ÒåÓÐÀíÊýÀࣨ·Ö×Ó¡¢·Öĸ£© { protected: int numerator,denominator; //numerator£º·Ö×Ó£¬denominator£º·Öĸ bool inf; protected: int gcd(int a,int b) //ÇóaºÍbµÄ×î´ó¹«Ô¼Êý { if(a==0)return b;if(b==0) return a; if(a>b) Swap(a,b); while(a>0){ int c=b%a;b=a;a=c; } return b; } public: RationalNumber() { inf=false; } RationalNumber(int n) { numerator=n; denominator=1; inf=false; } RationalNumber(int numerator,int denominator) { this->numerator=numerator; this->denominator=denominator; Simplify(); } virtual ~RationalNumber() {} void Simplify() { if(denominator==0) { inf=true; } else if(numerator==0) { denominator=1; inf=false; } else { int k=gcd(abs(numerator),abs(denominator)); numerator/=k; denominator/=k; inf=false; } } RationalNumber operator+(const RationalNumber& b) const { RationalNumber result; result.denominator=this->denominator*b.denominator; result.numerator=this->numerator*b.denominator+this->denominator*b.numerator; result.Simplify(); return result; } RationalNumber operator-(const RationalNumber& b) const { RationalNumber result; result.denominator=this->denominator*b.denominator; result.numerator=this->numerator*b.denominator-this->denominator*b.numerator; result.Simplify(); return result; } RationalNumber operator*(const RationalNumber& b) const { RationalNumber result; result.denominator=this->denominator*b.denominator; result.numerator=this->numerator*b.numerator; result.Simplify(); return result; } RationalNumber operator/(const RationalNumber& b) const { RationalNumber result; result.denominator=this->denominator*b.numerator; result.numerator=this->numerator*b.denominator; result.Simplify(); return result; } RationalNumber& operator=(const RationalNumber& b) { denominator=b.denominator; numerator=b.numerator; return (*this); } RationalNumber& operator=(int b) { denominator=1; numerator=b; return (*this); } bool operator==(const RationalNumber& b) const { if((b.denominator==this->denominator)&&(b.numerator==this->numerator)) return true; return false; } bool operator==(int b) const { if((1==this->denominator)&&(b==this->numerator)) return true; return false; } bool operator!=(const RationalNumber& b) const { if(b.denominator!=this->denominator||b.numerator!=this->numerator) return true; return false; } bool operator!=(int b) const { if(1!=this->denominator||b!=this->numerator) return true; return false; } int Numerator() const { return numerator; } int Denominator() const { return denominator; } }; RationalNumber number[COUNT_OF_NUMBER]; //ÓÃÊý×énumber[]±£´æ²Ù×÷Êý string expression[COUNT_OF_NUMBER]; //ÓÃÊý×éexpression[]±£´æËãʽ bool Search(int n) //µÝ¹éº¯Êý { if (n==1) { if (number[0]==NUMBER_TO_BE_CAL) //³É¹¦ËÑË÷µÃµ½24 //Èônumber[]ÊÇdoubleÐÍ //Ò²¿ÉÓÃif (fabs(number[0]-NUMBER_TO_BE_CAL)<PRECISION) { cout<<expression[0]<<endl; //Êä³ö±í´ïʽ return true; } else { return false; } } for (int i=0;i<n;i++) { for (int j=i+1;j<n;j++) { RationalNumber a, b; string expa, expb; a=number; //ÓÃa±£´ænumber b=number[j]; //ÓÃb±£´ænumber[j] number[j]=number[n-1]; //½«number[n-1]ÏòǰÌîÈëµ½ÔÀ´number[j]µÄλÖà expa=expression; //ÓÃexpa±£´æexpression expb=expression[j]; //ÓÃexpb±£´æexpression[j] expression[j]=expression[n-1]; //½«expression[n-1]ÏòǰÌîÈëµ½ÔÀ´expression[j]µÄλÖà //ÒòΪÏÂÒ»²ãµÝ¹éµ÷ÓÃsearch(n-1)½«½ö¶ÔϱêΪ0~n-2µÄÊý½øÐвÙ×÷ÁË //¼Ó·¨ expression='('+expa+'+'+expb+')'; //½«aºÍb¼ÆËãµÄËãʽÌîÈëµ½ÔÀ´expressionµÄλÖà number=a+b; //½«aºÍb¼ÆËãµÄ½á¹ûÌîÈëµ½ÔÀ´numberµÄλÖà if (Search(n-1)) return true; //Ò»µ©µÃµ½Ò»¸ö¿ÉÐн⣬¼´²ã²ãÏòÉÏ·µ»Ø£¬´Ó¶øÈ·±£Ö»Êä³öÒ»¸ö¿ÉÐнâ //¼õ·¨ÓÐÁ½ÖÖÇé¿öa-bºÍb-a expression='('+expa+'-'+expb+')'; number=a-b; if (Search(n-1)) return true; expression='('+expb+'-'+expa+')'; number=b-a; if (Search(n-1)) return true; //³Ë·¨ expression='('+expa+'*'+expb+')'; number=a*b; if (Search(n-1)) return true; //³ý·¨Ò²ÓÐÁ½ÖÖÇé¿öa/bºÍb/a if (b!=0) { expression='('+expa+'/'+expb+')'; number=a/b; if (Search(n-1)) return true; } if (a!=0) { expression='('+expb+'/'+expa+')'; number=b/a; if (Search(n-1)) return true; } //±¾ÂÖµ÷ÓÃÍê±Ïºó£¬ÓÃa,b,expa,expb½«Êý×énumber[]ºÍexpression[]»Ö¸´Ô×´ number=a; number[j]=b; expression=expa; expression[j]=expb; } } return false; } СµÜµÄC++¶¼ÊÇ×ÔѧµÄ ÀïÃæºÃ¶à¶«Î÷֮ǰû½Ó´¥¹ý ÒòΪ¿Î³ÌÉè¼ÆÊ±¼ä±È½Ï½ô ûʱ¼ä²é¿´Ïà¹Ø×ÊÁÏ ÌØÀ´´ËÇó³ö ´úÂëÎļþÔÚ¸½¼þÀï ÉÔ΢Óе㳤 »¹Çë¸÷λ°ï°ïæÁË ÏÈлл¸÷λÁË int main() { cout<<"please input four numbers:"<<endl; for (int i=0;i<COUNT_OF_NUMBER;i++) { char buffer[20]; //·ÖÅ䳤¶ÈΪ20µÄ×Ö·ûÊý×ébuffer[] int x; cin>>x; number=x; itoa(x,buffer,10); //itoa():½«Ò»¸ö10½øÖƵÄintegerÊýת»»ÎªstringÀàÐÍ //¼´£º°ÑÊäÈëµÄintÐͲÙ×÷Êýx£¬×ª±ä³É¿ÉÒÔ·ÅÔÚbuffer[]ÖеÄstringÀàÐÍ expression=buffer; //ÓÃexpressionÖ¸ÕëÖ¸Ïòbuffer[]Êý×é¿Õ¼äµÄÆðʼλÖà } bool dex=Search(4); if(!dex) cout<<"Fail!!!"<<endl; return 0; } |
» ²ÂÄãϲ»¶
ÉúÎïѧ308·ÖÇóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£©
ÒѾÓÐ7È˻ظ´
296²ÄÁÏר˶Çóµ÷¼Á
ÒѾÓÐ18È˻ظ´
²ÄÁÏÓ뻯¹¤306·ÖÕÒµ÷¼Á
ÒѾÓÐ18È˻ظ´
302Çóµ÷¼Á
ÒѾÓÐ9È˻ظ´
Ò»Ö¾Ô¸±±¾©¿Æ¼¼´óѧ²ÄÁϹ¤³Ì085601£¬Çóµ÷¼Á
ÒѾÓÐ11È˻ظ´
283·Ö²ÄÁÏÓ뻯¹¤Çóµ÷¼Á
ÒѾÓÐ19È˻ظ´
326Çóµ÷¼Á
ÒѾÓÐ8È˻ظ´
Ò»Ö¾Ô¸Ö£ÖÝ´óѧ²ÄÁÏÓ뻯¹¤085600£¬Çóµ÷¼Á
ÒѾÓÐ10È˻ظ´
081200-11408-276ѧ˶Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
280Çóµ÷¼Á
ÒѾÓÐ14È˻ظ´














»Ø¸´´ËÂ¥