题目要求
基本要求
随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
提高要求
用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
1. 程序风格良好(使用自定义注释模板)
2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
3.所有成绩均可记录在TopList.txt文件中。
算法设计
程序代码
/*************************************************
Copyright:XUST
Author: 高雪峰
email: 1456913441@qq.com
Date: 2019-04-14
Description:实现24点游戏(提高)。
**************************************************/
#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include<stdlib.h>
#include<time.h>
using namespace std;
class TFpoint {
protected:
int num[1][4];//存放随机数
string str;//存放用户输入的表达式
string answer;//记录所有能算出24的算法
//string oc[24];
int n = 0;//记录有多少组算法
public:
TFpoint() {
//初始化对象并向用户提供四个随机数,获取用户的表达式
int temp=0;
//srand((unsigned)time(NULL));
while (temp == 0) {
num[n][0]= (rand() % (14 - 1)) + 1;
num[n][1] = (rand() % (14 - 1)) + 1;
num[n][2] = (rand() % (14 - 1)) + 1;
num[n][3] = (rand() % (14 - 1)) + 1;
if (cal(num[n][0], num[n][1], num[n][2], num[n][3]))
temp++;
}
cout << num[0][0] << " " << num[0][1] << " " << num[0][2] << " " << num[0][3] << endl;
//print();
cout << "请输入:";
cin >> str;
}
/*void print() {
for(int i=n-1;i>=0;i--)
cout << num[i][0] << " " << num[i][1] << " " << num[i][2] << " " << num[i][3]<<endl;
}*/
int cal(int x, int y, int z, int w) //运算表达式的所有情况
{
//cout << "a";
//int m = 0;
if (x + y + z + w == 24) {
answer += "x + y + z + w == 24#";
//oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] += '+'; oc[n] += z; oc[n] += '+'; oc[n] += w;
n++;
//cout << x << "+" << y << "+" << z << "+" << w << "=24" << endl;
}
if (x + y + z - w == 24) {
answer += "x + y + z - w == 24#";
//oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] += '+'; oc[n] += z; oc[n] += '-'; oc[n] += w;
n++;
//cout << x << "+" << y << "+" << z << "-" << w << "=24" << endl;
}
if ((x + y)*(z + w) == 24) {
answer += "(x + y)*(z + w) == 24#";
//oc[n] += '('; oc[n] += x; oc[n] += '+'; oc[n] += y; oc[n] = ')'; oc[n] = '*'; oc[n] += '('; oc[n] += z; oc[n] += '+'; oc[n] += w; oc[n] += ')';
n++;
//cout << "(" << x << "+" << y << ")*(" << z << "+" << w << ")=24" << endl;
}
if ((x - y)*(z + w) == 24) {
answer += "(x - y)*(z + w) == 24#";
//oc[n] += '('; oc[n] += x; oc[n] += '-'; oc[n] += y; oc[n] = ')'; oc[n] = '*'; oc[n] += '('; oc[n] += z; oc[n] += '+'; oc[n] += w; oc[n] += ')';
n++;
//cout << "(" << x << "-" << y << ")*(" << z << "+" << w << ")=24" << endl;
}
if ((x - y)*(z - w) == 24) {
answer += "(x - y)*(z - w) == 24#";
//oc[n] += '('; oc[n] += x; oc[n] += '-'; oc[n] += y; oc[n] = ')'; oc[n] = '*