这是我第一次写博文,有点小激动呢!
在网上,发现有很多的人都在找一些经典小游戏,然后,我就来到了这里,发现二十四点这个小游戏基本上没有人会写(写是能写的,但是没什么人会去写二十四点),但是它本来就是一个非常“古老”的经典小游戏,所以我就来写一下。
为了在CSDN里立足,我写这个程序的是候只能用一个词表达,那就是(“奥利给!”)。
然后我就写了三天。。。。。。
接下来,是时候展现自己的“研究”成果了!
这个是用来出二十四点题目的:
#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;
int main()
{
HWND hwnd=GetForegroundWindow();
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<"欢迎使用24点出题器!\n";
cout<<"使用须知(必读!!!):\n";
cout<<"此程序模拟24点抽牌过程,进行出牌。\n";
cout<<"请根据提示使用!\n此程序最大支持9位数运算,\n不要输入超过9位的数!!!\n";
cout<<"严禁输入字母!!! \n";
int n=0;
cout<<"要出几题:";
cin>>n;
for(int k=1;k<=n;k++)
{
HWND hwnd=GetForegroundWindow();
ShowWindow(hwnd,SW_MAXIMIZE);
srand(time(0));
system("cls");
cout<<"欢迎使用24点出题器!\n";
cout<<"使用须知(必读!!!):\n";
cout<<"此程序模拟24点抽牌过程,进行出牌。\n";
cout<<"请根据提示使用!\n此程序最大支持9位数运算,\n不要输入超过9位的数!!!\n";
cout<<"严禁输入字母!!! \n";
cout<<"共";
cout<<n;
cout<<"题\n";
cout<<"第"<<k<<"题:\n";
cout<<"正在准备出题";
for(int mm=0;mm<2;mm++)
{
Sleep(200);
for(int nn=0;nn<6;nn++)
{
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<'.'; Sleep(200);
}
cout<<"\b\b\b\b\b\b \b\b\b\b\b\b";
Sleep(200);
}
for(int nn=0;nn<6;nn++)
{
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<'.'; Sleep(200);
}
cout<<'\n';
cout<<"准备就绪!\n开始出题:\n";
cout<<"第一张卡牌:";
for(int i=0;i<100;i++)
{
cout<<i%9+1;
cout<<'\b';
Sleep(20);
}
cout<<rand()%12+1<<'\n';
cout<<"第二张卡牌:";
for(int i=0;i<100;i++)
{
cout<<i%9+1;
cout<<'\b';
Sleep(20);
}
cout<<rand()%12+1<<'\n';
cout<<"第三张卡牌:";
for(int i=0;i<100;i++)
{
cout<<i%9+1;
cout<<'\b';
Sleep(20);
}
cout<<rand()%12+1<<'\n';
cout<<"第四张卡牌:";
for(int i=0;i<100;i++)
{
cout<<i%9+1;
cout<<'\b';
Sleep(20);
}
cout<<rand()%12+1<<'\n';
cout<<"第"<<k<<"题出题完成!\n";
system("pause");
system("cls");
}
return 0;
}
这个大家可用可不用,自己乱想也行。。。。。。但是如果你用了你就不用担心无解了。
接下来就是用来解二十四点了:
#include <iostream>
#include <string>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
const double PRECISION = 1E-6;
const int COUNT_OF_NUMBER = 4;
const int NUMBER_TO_BE_CAL = 24;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Judgement = false; //判断是否有解。
int count = 0;
void Search(int n)
{
if (n==1)
{
if ( fabs(number[0] - NUMBER_TO_BE_CAL) <= PRECISION ) //对于除法,要小心小数的精确位数
{
cout << expression[0] << "\t\t";
Judgement = true;
count ++;
if((count % 5)==0)
cout<<endl;
}
else
{ }
}
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]; //递归之后,n比以前小一位,所以可以不停向前赋值
expa = expression[i];
expb = expression[j];
expression[j] = expression[n - 1]; //递归之后,n比以前小一位,所以可以不停向前赋值
expression[i] = '(' + expa + "+ " + expb + ')'; //加法不需要分顺序
number[i] = a + b;
Search(n-1);
expression[i] = '(' + expa + "- " + expb + ')'; //减法应该分顺序,减数以及被减数
number[i] = a - b;
Search(n-1);
expression[i] = '(' + expb + "- " + expa + ')'; //减法应该分顺序,减数以及被减数
number[i] = b - a;
Search(n-1);
expression[i] = '(' + expa + "×" + expb + ')'; //乘法不需要分顺序
number[i] = a * b;
Search(n-1);
if (b != 0)
{
expression[i] = '(' + expa + "÷" + expb + ')'; //除法应该分顺序,除数以及被除数
number[i] = a / b;
Search(n-1);
}
if (a != 0)
{
expression[i] = '(' + expb + "÷" + expa + ')'; //除法应该分顺序,除数以及被除数
number[i] = b / a;
Search(n-1);
}
number[i] = a; //这4句语句是为了防止如果上面几种可能都失败了的话,
number[j] = b; //就把原来的赋值撤消回去,以无干扰的正确的进入到下一次
expression[i] = expa; //for循环队列中。
expression[j] = expb; //
}
}
}
int main()
{
HWND hwnd=GetForegroundWindow();
ShowWindow(hwnd,SW_MAXIMIZE);
for(int kk=0;kk<13;kk++)
{
cout<<"欢迎使用24点破解程序!\n";
cout<<"使用须知(必读!!!):\n";
cout<<"一副扑克牌有52张(不算大王小王)\n";
cout<<"每4张一组,共13组。\n所以程序会进行13组运算,之后自动退出。\n";
cout<<"请根据提示使用!\n此程序最大支持9位数运算,\n不要输入超过9位的数!!!\n";
cout<<"严禁输入字母!!! \n";
count=0;
Judgement=0;
cout<<"请输入4张卡牌:\n";
for (int i = 0; i < COUNT_OF_NUMBER; i++)
{
char buffer[20];
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<"第"<<i+1<<"个卡片:";
cin>>number[i];
itoa(number[i],buffer,10);//参数(int型)是该数值在字符串里以什么进制存放。
expression[i] = buffer;
}
system("cls");
cout<<"欢迎使用24点破解程序!\n";
cout<<"使用须知(必读!!!):\n";
cout<<"一副扑克牌有52张(不算大王小王)\n";
cout<<"每4张一组,共13组。\n所以程序会进行13组运算,之后自动退出。\n";
cout<<"请根据提示使用!\n此程序最大支持9位数运算,\n不要输入超过9位的数!!!\n";
cout<<"严禁输入字母!!! \n";
cout<<"四张卡牌为:\n";
cout<<"第一张:"<<number[0]<<"\n";
cout<<"第二张:"<<number[1]<<"\n";
cout<<"第三张:"<<number[2]<<"\n";
cout<<"第四张:"<<number[3]<<"\n";
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<"正在计算,请稍等" ;
for(int mm=0;mm<2;mm++)
{
Sleep(200);
for(int nn=0;nn<6;nn++)
{
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<'.'; Sleep(200);
}
cout<<"\b\b\b\b\b\b \b\b\b\b\b\b";
Sleep(200);
}
for(int nn=0;nn<6;nn++)
{
ShowWindow(hwnd,SW_MAXIMIZE);
cout<<'.'; Sleep(200);
}
cout<<endl;
cout<<"计算完成!\n";
cout<<"计算结果:\n";
Search(COUNT_OF_NUMBER) ;
ShowWindow(hwnd,SW_MAXIMIZE);
if(Judgement==true)
{
cout<<"\n成功!"<<endl;
cout<<"共找到"<<count<<"种解!"<<endl;
}
else
{
cout<<"未找到任何解!"<<endl;
}
system("pause");
cout<<"\n\n";
system("cls");
ShowWindow(hwnd,SW_MAXIMIZE);
//cout<<"按回?
//getchar();
}
return 100;
}
这个程序是我这个小学四年级学生完成的,所以写出的程序可能有一些小bug,但是不伤大局,能用是能用的。QAQ
看到这个博文的人,点个赞吧,好吗?这些代码在下载区里也有哦!