首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

两道有趣的C/C++编程题解决办法

2012-02-24 
两道有趣的C/C++编程题a.给定四个数(1--13),判经过四则运算后能否得到结果24,若能,输出表达式.b.解N元一次

两道有趣的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中有.
第二个不会解方程了.呵呵
------解决方案--------------------


第二个以前应该学过,不过早忘了

热点排行