加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 计算机二级 - 正文

 
C++编写24程序
来源:fjzsksw.com 2010-4-28 编辑:zhoupanyu 【字体:小 大】

 

  009using namespace std;

  010#include "Token.h"

  011#include "ExpCalc.h"

  012#include "24Game.h"

  013int Game::minOperand = 1;

  014int Game::maxOperand = 13;

  015extern char operators[7];

  016Game::Game()

  017{

  018    srand(time(NULL));

  019}

  020void Game::GenNewNumbers()

  021{

  022    while (1)

  023    {

  024        for (int i = 0;i<4;i++)

  025            generated_operands[i] = rand()%(maxOperand-minOperand+1) + minOperand;

  026        if (hasSolutions()) break;

  027    }

  028    //generated_operands[0] = 4;

  029    //generated_operands[1] = 8;

  030    //generated_operands[2] = 4;

  031    //generated_operands[3] = 9;

  032

  033}

  034

  035//若有解,只保存一组先

  036bool Game::hasSolutions()

  037{

  038    vector<double> a(4);//操作数

  039    vector<Operator> ops(3);//操作符

  040    double res;

  041    copy(generated_operands,generated_operands+4,a.begin());

  042    sort(a.begin(),a.end());

  043    while (next_permutation(a.begin(),a.end()))

  044    {

  045        for (int i = ADD_OPR;i<=DIV_OPR;i++)

  046        {

  047            for (int j = ADD_OPR;j<=DIV_OPR;j++)

  048            {

  049                for (int k = ADD_OPR;k<=DIV_OPR;k++)

  050                {

  051                    ops[0] = Operator(i);ops[1]=Operator(j);ops[2] = Operator(k);

  052                    bool isOk = calc.PostfixCalc(a,ops,res);

  053                    if (isOk && fabs(res - 24) < 1e-6)

  054                    {

  055                        solu_operands = a;

  056                        solu_operators = ops;

  057                        hasSolu = true;

  058                        return true;

  059                    }

  060                }

  061            }

  062        }

  063    }

  064    hasSolu = false;

  065    return false;

  066}

  067

  068void Game::ShowNums()

  069{

  070    for (int i = 0;i<4;i++)

  071        cout << generated_operands[i] << " ";

  072    cout << endl;

  073}

  074

  075void Game::ShowSolution()

  076{

  077    for (int i = 0;i<solu_operands.size();i++)

  078        cout << solu_operands[i]<<" ";

  079    for (int i = 0;i<solu_operators.size();i++)

  080        cout << operators[solu_operators[i]] << " ";

  081    cout << endl;

  082}

  083

  084bool Game::Calc(vector<Token>& tokens,double & res)

  085{

  086    return calc.infixCalc(tokens,res);

  087}

  088

  089bool Game::Check(vector<Token>& tokens)

  090{

  091    vector<double> a;

  092    for (int i = 0;i<tokens.size();i++)

  093    {

  094        if (tokens[i].type == Numeric)

  095            a.push_back(tokens[i].x);

  096    }

  097    sort(a.begin(),a.end());

  098

  099    vector<double> opr_copy(4);

  100    copy(generated_operands,generated_operands+4,opr_copy.begin());

  101    sort(opr_copy.begin(),opr_copy.end());

  102

  103    if (opr_copy.size()!=a.size())

  104    {

  105        return false;

  106    }

  107    for (int i = 0;i<a.size();i++)

  108    {

  109        if (a[i]!=opr_copy[i])

  110        {

  111            return false;

  112        }

  113    }

  114    return true;

  115}

  24Points:主文件

  01#include <string>

  02#include <iostream>

  03#include <vector>

  04#include <stack>

  05#include <cmath>

  06using namespace std;

  07#include "Token.h"

  08#include "ExpCalc.h"

  09#include "24Game.h"

  10int main()

  11{

  12    Game game;

  13    double res;

  14    while (1)

  15    {

  16        cout << "开始本轮算24游戏"<<endl;

  17        game.GenNewNumbers();

  18        game.ShowNums();

  19        while(1)

  20        {

  21            cout << "输入你的表达式:以#结尾,只输入#将显示答案,案例:(4*9 -4-8)"<<endl;

  22            string expression;

  23            getline(cin,expression);

  24            if (expression == "#")

  25            {

  26                game.ShowSolution();

  27                break;

  28            }

  29            vector<Token> tokens;

  30            Parse(expression,tokens);

  31

  32            if (!game.Check(tokens))

  33                cout << "输入的数字不对"<<endl;

  34            bool isOk = game.Calc(tokens,res);

  35            if (!isOk)

  36                cout << "输入格式有误" <<endl;

  37            else if (fabs(res - 24) < 1e-6 )

  38                cout <<"您算对了"<<endl;

  39            else

  40                cout << "您算错了"<<endl;

  41        }

  42    }

  43    return 0;

  44}

 

 



 
  • 上一个文章:

  • 下一个文章:
  • 网站版权与免责声明
    ①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
    ②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
    推荐文章
  • 此栏目下没有推荐文章
  • 热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机