两道有趣的C/C++编程题
a. 给定四个数(1--13),判经过四则运算后能否得到结果24,若能,输出表达式.
b. 解N元一次方程从文件读入整数 N, 然后读入N*( N+1)矩阵,得到解并输出到文件中。
[解决办法]
楼主那儿找的题目,的确很有新意,而且都不是一下子就能搞定的.估计没有人有时间来帮你编写.
[解决办法]
a. 给定四个数(1--13),判经过四则运算后能否得到结果24,若能,输出表达式.
以下代码为参考:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PRECISION = 1E-6;
const int COUNT = 4;
const int RESULT = 24;
double number[COUNT]; //这里一定要用double,看看第一题的答案就知道为什么了
string expression[COUNT]; //保存表达式
bool Test(int n){
//递归结束
if(n==1){
if(fabs(number[0]-RESULT) <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++){
double a,b;
string expa,expb;
a=number[i];
b=number[j];
number[j]=number[n-1];
expa=expression[i];
expb=expression[j];
expression[j]=expression[n-1];
expression[i]= '( '+expa+ '+ '+expb+ ') ';
number[i]=a+b;
if(Test(n-1))
return true;
//减号有两种情况,a-b与b-a
expression[i]= '( '+expa+ '- '+expb+ ') ';
number[i]=a-b;
if(Test(n-1))
return true;
expression[i]= '( '+expb+ '- '+expa+ ') ';
number[i]=b-a;
if(Test(n-1))
return true;
expression[i]= '( '+expa+ '* '+expb+ ') ';
number[i]=a*b;
if(Test(n-1))
return true;
//除法也有两种情况,a/b与b/a
if(b!=0){
expression[i]= '( '+expa+ '/ '+expb+ ') ';
number[i]=a/b;
if(Test(n-1))
return true;
}
if(a!=0){
expression[i]= '( '+expb+ '/ '+expa+ ') ';
number[i]=b/a;
if(Test(n-1))
return true;
}
//恢复数组
number[i]=a;
number[j]=b;
expression[i]=expa;
expression[j]=expb;
}
}
return false;
}
void main(void){
for(int i=0;i <COUNT;i++){
char buffer[20];
int x;
cin > > x;
number[i]=x;
itoa(x,buffer,10);
expression[i]=buffer;
}
if(Test(COUNT))
cout < < "Success " < < endl;
else
cout < < "Fail " < < endl;
}
[解决办法]
顶 厉害!
[解决办法]
好!
[解决办法]
第一个问题,我blog中有.
第二个不会解方程了.呵呵
------解决方案--------------------
第二个以前应该学过,不过早忘了