C语言实现24点游戏算法

纸牌游戏24点,输入4个1到13之间的值,通过加减乘除判断是否可以得到24。

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool game24(char ch[],char flat,int data[],int num,int sum)
{
    
    
    if(num > 1)//记录加减乘除符号,其中\表示将除数和被除数调换位置a\b ==> b/a.
        ch[num-2] = flat;
    if(num == 4)
    {
    
    
        if(sum == 24)//能够得到24就返回true
            return true;
        else
            return false;
    }
    if(num == 0)//第一次进来
    {
    
    
        return game24(ch,'0',data,num+1,data[num]);
    }
    if(sum%data[num] == 0)//能够整除(因为如果有余数时,计算机只会取整数部分,得到的结果就错了)
    {
    
    
        if(sum != 0)//避免除以0
            return game24(ch,'+',data,num+1,sum+data[num])||game24(ch,'-',data,num+1,sum-data[num])||game24(ch,'*',data,num+1,sum*data[num])||game24(ch,'/',data,num+1,sum/data[num])||game24(ch,'\\',data,num+1,data[num]/sum);
        else
            return game24(ch,'+',data,num+1,sum+data[num])||game24(ch,'-',data,num+1,sum-data[num])||game24(ch,'*',data,num+1,sum*data[num])||game24(ch,'/',data,num+1,sum/data[num]);
    }else
    {
    
    
        if(sum != 0)
            return game24(ch,'+',data,num+1,sum+data[num])||game24(ch,'-',data,num+1,sum-data[num])||game24(ch,'*',data,num+1,sum*data[num])||game24(ch,'\\',data,num+1,data[num]/sum);
        else
            return game24(ch,'+',data,num+1,sum+data[num])||game24(ch,'-',data,num+1,sum-data[num])||game24(ch,'*',data,num+1,sum*data[num]);
    }
    
}

//对四个数字进行排列组合
bool sort(int data[],char ch[],int a,int b,int c,int d)
{
    
    
    int num = 0,sum = 0;
    int i = 0;
    int j = 0;
    int n = 0;
    int m = 0;
    for(i=0;i<4;i++)
    {
    
    
        for(j=0;j<4;j++)
        {
    
    
            if(i == j)
                continue;
            for(n=0;n<4;n++)
            {
    
    
                if(n == j || n == i)
                    continue;
                for(m=0;m<4;m++)
                {
    
    
                    if(m == n || m == j || m == i)
                        continue;
                    data[i] = a;
                    data[j] = b;
                    data[n] = c;
                    data[m] = d;
                    if(game24(ch,'0',data,num,sum))
                        return true;  
                }
            }
        }
    }
    
    return false;
}

int main()
{
    
    
    int a = 1;
    int b = 2;
    int c = 8;
    int d = 9;
    int data[4] = {
    
    0};
    char ch[3] = {
    
    0};
    if(sort(data,ch,a,b,c,d))
    {
    
    
        printf("%d%c%d%c%d%c%d\n",data[0],ch[0],data[1],ch[1],data[2],ch[2],data[3]);
    }
    else
        printf("false\n");
}

>>
C语言解决八皇后问题
C语言实现汉诺塔

猜你喜欢

转载自blog.csdn.net/HZS8520223520/article/details/121320603