| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 923 人关注过本帖
标题:[求助]不知是否能用四则运算构成的循环
只看楼主 加入收藏
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
5551算24点貌似很强大嘛,必须先算1/5,没有一种运算过程都是整数的方法

(5-1/5)*5
5*(5-1/5)

程序代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <stack>
#include <sstream>
using namespace std;

double calc(char op,double& a,double b)
{
    switch(op)
    {
    case '+':return a+=b;
    case '-':return a-=b;
    case '*':return a*=b;
    case '/':return a/=b;
    }
    return 0;
}

//后缀表达式求值,图省事只支持一位数的
double eval(string poststr)
{
    istringstream iss(poststr);
    stack<double> S;
    for (char ch;iss>>ch;){
        if(isdigit(ch)){
            S.push(double(ch-'0'));
        }
        else{
            double t=S.top();S.pop();
            calc(ch,S.top(),t);
        }
    }
    double res = S.top();S.pop();
    return res;
}

char da[] = "5551";
char op[3];

char expr[10];

#define EQ(X,Y) ((X)-(Y)<1e-6 && (Y)-(X)<1e-6)

//枚举所有合法的后缀表达式
void dfs(int dCnt,int oCnt)
{
    if(dCnt == 4 && oCnt ==3)
    {
        if( EQ(eval(expr),24) )
        {
            puts(expr);
        }
    }
    else
    {
        //如果操作数比运算符至少多2个,并且还有剩余的运算符,那么可以加一个运算符到后缀表达式结尾
        if(dCnt - oCnt >= 2 && oCnt <3)
        {
            expr[dCnt+oCnt] = op[oCnt];
            dfs(dCnt,oCnt+1);
        }

        //如果还有剩余的操作数,那么可以加一个操作数到后缀表达式结尾
        if(dCnt < 4)
        {
            expr[dCnt+oCnt] = da[dCnt];
            dfs(dCnt+1,oCnt);
        }
    }
}

int main()
{     
    sort(da,da+4);
    do
    {
        //枚举3个符号
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=0;k<4;k++)
                {
                    op[0] = "+-*/"[i];                    
                    op[1] = "+-*/"[j];
                    op[2] = "+-*/"[k];
                    dfs(0,0);
                }
            }
        }
    } while (next_permutation(da,da+4));//枚举操作数的顺序
}

2009-08-08 13:59
chy211
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-8-7
收藏
得分:0 
回复 14楼 leeco

因为是新手..看14楼的程序挺吃力..不过稍微能理解一点..
感谢14楼的朋友..
2009-08-08 19:12
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
回复 13楼 wxjeacen

leeco才是真正的牛人!

带括号计算24的程序也是早就编过的,拿到新手面前炫耀有什么意思?
我们的任务是解答彼此的疑问,不是来炫耀的。
2009-08-13 14:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 9楼 pangding

稍微复杂一点的  递归 写就行了。


雨中飞燕的 小册子里有。




我就是真命天子,顺我者生,逆我者死!
2009-08-13 14:31
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
以下是引用CrystalFan在2009-8-13 14:19的发言:回复 13楼 wxjeacenleeco才是真正的牛人!我们的任务是解答彼此的疑问,不是来炫耀的。
那是你的任务。别把我跟你混为一谈。 谢谢。

生命不熄,战斗不止.
2009-08-13 14:52
快速回复:[求助]不知是否能用四则运算构成的循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024295 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved