Bootstrap

C语言实现一个24点游戏

  1. 定义扑克牌的值,其中A=1或14(在这个上下文中我们通常认为A=1),J=11,Q=12,K=13。
  2. 随机选择4张牌。
  3. 使用递归算法来尝试所有可能的组合来达到24点。
  4. 输出结果或提示玩家输入表达式。

下面是一个简化版的示例代码,展示如何随机选取四张牌并检查是否能通过运算得到24。注意,这里的代码不包含用户交互部分,仅作为一个基础框架来解释如何实现。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define TRUE 1
#define FALSE 0

int calculate(int a, int b, char op) {
    switch(op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/':
            if(b != 0) return a / b;
            return 0; // Division by zero is not allowed.
    }
    return 0;
}

int check24(int cards[], int n, int target, int result = 0, int count = 0) {
    if (count == n) {
        return result == target ? TRUE : FALSE;
    }
    
    for (int i = count; i < n; ++i) {
        int tmp = check24(cards, n, target, calculate(result, cards[i], '+'), count + 1);
        if (tmp) return TRUE;
        tmp = check24(cards, n, target, calculate(result, cards[i], '-'), count + 1);
        if (tmp) return TRUE;
        tmp = check24(cards, n, target, calculate(result, cards[i], '*'), count + 1);
        if (tmp) return TRUE;
        tmp = check24(cards, n, target, calculate(result, cards[i], '/'), count + 1);
        if (tmp && cards[i] != 0) return TRUE;
    }
    return FALSE;
}

int main() {
    int cards[4];
    int faces[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    srand((unsigned int)time(NULL));
    
    for (int i = 0; i < 4; i++) {
        cards[i] = faces[rand() % 13];
        printf("Card %d: %d\n", i + 1, cards[i]);
    }
    
    if (check24(cards, 4, 24)) {
        printf("It is possible to get 24.\n");
    } else {
        printf("It is not possible to get 24.\n");
    }
    
    return 0;
}
;