社区
新手乐园
帖子详情
求24问题?
sun1889
2005-10-20 01:26:02
运用加减乘除求出结果等于24。[C语言]
...全文
208
13
打赏
收藏
求24问题?
运用加减乘除求出结果等于24。[C语言]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tanghui0512
2005-10-22
打赏
举报
回复
有一个人家写的,自己看不大懂
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PRECISION = 1E-6;
const int COUNT_OF_NUMBER = 4;
const int NUMBER_TO_CAL = 24;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Search(int n)
{
if (n == 1) {
if ( fabs(number[0] - NUMBER_TO_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++) {
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 ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '-' + expb + ')';
number[i] = a - b;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expb + '-' + expa + ')';
number[i] = b - a;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '*' + expb + ')';
number[i] = a * b;
if ( Search(n - 1) ) return true;
if (b != 0) {
expression[i] = '(' + expa + '/' + expb + ')';
number[i] = a / b;
if ( Search(n - 1) ) return true;
}
if (a != 0) {
expression[i] = '(' + expb + '/' + expa + ')';
number[i] = b / a;
if ( Search(n - 1) ) return true;
}
number[i] = a;
number[j] = b;
expression[i] = expa;
expression[j] = expb;
}
}
return false;
}
void main()
{
while(1)
{
cout<<"Input 4 Numbers:";
for (int i = 0; i < COUNT_OF_NUMBER; i++) {
char buffer[20];
int x;
cin >> x;
number[i] = x;
itoa(x, buffer, 10);
expression[i] = buffer;
}
if ( Search(COUNT_OF_NUMBER) ) {
cout << "Success." << endl;
} else {
cout << "Fail." << endl;
}
cout<<endl;
}
}
bombwang
2005-10-22
打赏
举报
回复
学习
appleyy
2005-10-21
打赏
举报
回复
完了,,我怎么向外送分啊。。。我给出的问题点数是20。
不知道怎么向外送,穷的就剩下点数了。哈哈!
-------------------------
管理
koil
2005-10-21
打赏
举报
回复
楼上星哥的,看不懂 解释下
qhfu
2005-10-21
打赏
举报
回复
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PRECISION = 0.00001;
double number[4];
string expression[4];
bool Search(int n)
{
if (n == 1)
{
if (fabs(number[0] - 24) < 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 (Search(n - 1)) return true;
expression[i] = '(' + expa + '-' + expb + ')';
number[i] = a - b;
if (Search(n - 1)) return true;
expression[i] = '(' + expb + '-' + expa + ')';
number[i] = b - a;
if (Search(n - 1)) return true;
expression[i] = '(' + expa + '*' + expb + ')';
number[i] = a * b;
if (Search(n - 1)) return true;
if (b != 0)
{
expression[i] = '(' + expa + '/' + expb + ')';
number[i] = a / b;
if (Search(n - 1)) return true;
}
if (a != 0)
{
expression[i] = '(' + expb + '/' + expa + ')';
number[i] = b / a;
if (Search(n - 1)) return true;
}
number[i] = a;
number[j] = b;
expression[i] = expa;
expression[j] = expb;
}
}
return false;
}
int main()
{
cout <<"Please input four numbers:" <<endl;
for (int i = 0; i < 4; i++)
{
char buffer[20];
int x;
cin >> x;
number[i] = x;
itoa(x, buffer, 10);
expression[i] = buffer;
}
if (Search(4))
{
cout << "Success." << endl;
}
else
{
cout << "Fail." << endl;
}
system("pause");
return 0;
}
sun1889
2005-10-21
打赏
举报
回复
完了,,我怎么向外送分啊。。。我给出的问题点数是20。
不知道怎么向外送,穷的就剩下点数了。哈哈!
yzisyz
2005-10-21
打赏
举报
回复
我曾经写过一个,算法也很笨。就是穷举给定的4个数字所有的表达式。然后对这些表达式求值......唯一要注意的就是要注意分数运算。速度还可以。
northwolves
2005-10-20
打赏
举报
回复
http://pzy.sgxf.com/ReadNews.asp?NewsID=156
chenhu_doc
2005-10-20
打赏
举报
回复
我们学校明天运动会,我当个体育部长,比较忙,就没有好多时间,不过我会尽快的写出来的 ! 就这样了 包涵!
sun1889
2005-10-20
打赏
举报
回复
TO:(小虎哥)
先把你的代码贴出来,学习一下!
chenhu_doc
2005-10-20
打赏
举报
回复
恩~~~~
楼主~~~~~~~~~~~~
难道不用象扑克牌中限制有四张牌么??
xiaocai0001
2005-10-20
打赏
举报
回复
用C++ 递归写过一个
chenhu_doc
2005-10-20
打赏
举报
回复
我只有很笨很笨的办法
在这里等高手
你必须知道的495个C语言
问题
1.5 这样的声明有什么
问题
?char*p1,p2;我在使用p2的时候报错了。 1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样的代码有什么
问题
?char*p;*p=malloc(10); 声明风格 1.7 怎样声明和定义全局变量...
5、数据库存储日期格式时,如何考虑时区转换
问题
?
最近在编程中遇到了时间与时区相关的
问题
,整理在这里 我的程序是一个在hadoop上运行的分布式程序,从mysql数据库中取数据,经过处理之后输出 一. 基本概念 时区 :time zone 1884年国际经线会议规定,全球按经度...
python函数编程
求
三个数的最小公倍数_python中最小公倍数怎么
求
?
在化学式中无机物里,...最小公倍数可用于解决一些
问题
,因此要关注最小公倍数。在python中怎么
求
去最小公倍数呢?下面,小编来教教你吧。代码:# 最小公倍数def lcm(a, b, c=1):if a * c % b != 0:return lcm(a, b...
“
求
答案?一筐鸡蛋:几个几个拿”的Python解答
求
答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个 6个6个拿,还剩3个。 7个7个拿,正好拿完。 8个8个拿,还剩1个。 9个9个拿,正好拿完...
0/1背包
问题
之动态规划法
求
最优解和最优解路径
0/1背包
问题
之动态规划法
求
最优解和最优解路径一、
问题
介绍二、
问题
分析三、动态规划(DP)四、
求
解过程4.1
求
解最优值的代码:4.2
求
最优解路径的代码(递归法):4.3
求
最优解路径的代码(非递归法):4.4 结合前面...
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章