24点游戏

对于24点游戏,最难的在于其算法,穷举算法是将一切可能性都计算出,所以还得好好学习这个算法。
#include<iostream>
#include<stdlib.h>
using namespace std;
class Dian
{
public:
    int division(int p,int q);//除法 
    int judge(int a,int b,int c);//选择两者之间的关系 
    char print(int c);//输出符号
    void menu();//界面显示
    int ceshi(); //是否继续进行的判断 
};
//除法 
int Dian::division(int p,int q)
{
    if(q==0){
        cout<<"分母不能为0"<<endl;
    }
    if(p%q==0) return p/q;
    else
        return 100000;
} 
//选择两者之间的关系 
int Dian::judge(int a,int b,int c)
{
    int s;
    switch(c)
    {
    case 1:s=a+b;break;
    case 2:s=a-b;break;
    case 3:s=a*b;break;
    case 4:s=division(a,b);break;
    }
    return s;
} 
//输出符号 
char Dian::print(int c)
{
    if(c==1) cout<<"+";
    else if(c==2) cout<<"-";
    else if(c==3) cout<<"*";
    else cout<<"/";
    return 0;
}
//是否继续进行的判断 
int Dian::ceshi()
{
    int m;
    cout<<"您是否继续进行24点游戏,继续请输入1,退出请按0:";
    cin>>m;
    if(m==1){
        system("cls");
        return 1;}
    else    return 0;
}
//菜单 
void Dian::menu()
{
    cout<<"***************************************"<<endl;
    cout<<" 欢迎来到24点小游戏"<<endl;
    cout<<"***************************************"<<endl;
    cout<<"*******1.自己设置四个数字**************"<<endl;
    cout<<"*******2.系统随机设置******************"<<endl;
}
int main()
{
    int f[4]; //四个1-14的数
    int i,j,m,n;//代表四个数的参数 
    int a,b,c; //符号
    int d1,d2,d3; //每步的结果
    Dian dian;
    int temp1,temp2;//介质转换,将大于13的数字转换为小于13的
    int flag=1;
    while(flag){
        dian.menu();
        int k;
        cin>>k;
        if(k==1){
            cout<<"请输入四个数字(两者之间用" "分离)"<<endl; 
            for(i=0;i<4;i++)
            {
                cin>>temp1;
                if(temp1>13){
                    temp2=temp1%13;
                    cout<<"将 "<<temp1<<" 转化为 "<<temp2<<endl; 
                }
                else    temp2=temp1;
                f[i]=temp2;
            }
            cout<<endl;
        }
        if(k==2){
            for(i=0;i<4;i++)
            {
                f[i]=rand()%13;//随机产生数
                cout<<f[i]<<" ";
            } 
            cout<<endl;
        }
        for(i=0;i<4;i++)  //穷举法进行计算 
            for(j=0;j<4;j++)
                if(j!=i)
                    for(m=0;m<4;m++)
                        if(m!=i&&m!=j)
                            for(n=0;n<4;n++)
                                if(n!=i&&n!=j&&n!=m)
                                    for(a=1;a<5;a++)
                                        for(b=1;b<5;b++)
                                            for(c=1;c<5;c++)
                                            {
                                                d1=dian.judge(f[i],f[j],a);
                                                d2=dian.judge(d1,f[m],b);
                                                d3=dian.judge(d2,f[n],c);
                                                if(d3==24)
                                                {
                                                    cout<<f[i];
                                                    cout<<dian.print(a);
                                                    cout<<f[j];
                                                    cout<<dian.print(b);
                                                    cout<<f[m];
                                                    cout<<dian.print(c);
                                                    cout<<f[n]<<"=24"<<endl;
                                                }
                                            }
                                            cout<<endl;
                                            flag=dian.ceshi();
    }
    return 0;                     
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言编写二十四点游戏(也称为24点游戏或四则运算游戏)是一个经典的编程练习,它主要利用数组和基本数学运算来解决。以下是简单的C语言程序框架,用于实现基本的二十四点算法: ```c #include <stdio.h> #include <stdlib.h> // 定义一个函数,用于计算给定数字数组能否得到24 int is_24(int *nums, int count) { for (int i = 0; i < count; i++) { for (int j = i + 1; j < count; j++) { // 生成所有可能的两数组合 for (int k = j + 1; k < count; k++) { int a = nums[i], b = nums[j], c = nums[k]; // 用剩余的一个数尝试所有运算 for (int op = 0; op < 4; op++) { switch (op) { case 0: // 加法 if (a + b + c == 24 || a + b - c == 24 || a + c - b == 24) return 1; break; case 1: // 减法 if (a + b - c == 24 || a - b + c == 24 || a - c + b == 24) return 1; break; case 2: // 乘法 if (a * b / c == 24 || a * b * c == 24 || a / b * c == 24) return 1; break; case 3: // 除法 if (a * b / c == 24 || a * c / b == 24 || a / b / c == 24) return 1; break; } } } } } return 0; // 如果找不到解决方案,返回0 } int main() { int nums[] = {5, 3, 9, 8}; // 示例输入数组 int count = sizeof(nums) / sizeof(nums); if (is_24(nums, count)) { printf("Solution found: %d + %d * (%d - %d)\n", nums, nums, nums, nums); } else { printf("No solution found.\n"); } return 0; } ``` 这个程序会检查给定的一组数字是否可以通过加、减、乘、除运算得到24。注意,这只是一个基本版本,实际应用中可能需要更复杂的逻辑处理用户输入、错误检查等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值