猜扑克牌大小问题二分法不用递归c语言源码
时间: 2024-09-26 19:06:15 浏览: 36
C语言二分法求解方程根的两种方法
5星 · 资源好评率100%
猜扑克牌大小的问题通常是一个经典的动态规划或迭代的问题,而不是直接使用二分搜索法(因为这个通常是用于查找范围内的某个特定值)。这里我们假设玩家需要猜测一副洗过的扑克牌中任意两张牌的大小顺序(例如红桃A比黑桃K大)。
下面是一个简单的C语言非递归版本的解决方案,它采用了循环遍历的方式,而不是递归:
```c
#include <stdio.h>
#include <stdbool.h>
bool guess_order(int card1, int card2) {
if (card1 == card2)
return false; // 同数值,不分大小
// 初始区间设定为[0, 4],代表四种花色(红桃、黑桃、梅花、方块)
int start = 0, end = 4;
while (start <= end) {
int mid = (start + end) / 2;
// 比较当前中间位置的花色对是否大于目标花色对
bool is_bigger = compare_cards(card1, card2, mid);
if (is_bigger) { // 如果较大,则排除左半部分
start = mid + 1;
} else { // 如果较小或相等,则排除右半部分
end = mid - 1;
}
}
return true; // 返回最终判断结果(即找到正确的花色顺序)
}
// 辅助函数,比较两个牌对应的花色是否更大
bool compare_cards(int card1, int card2, int suit_index) {
int rank1 = card1 % 13; // 提取牌面编号(A=0, K=12)
int rank2 = card2 % 13;
// 比较牌面编号(忽略花色)
if (rank1 > rank2)
return true;
else if (rank1 < rank2)
return false;
else
return card1 / 13 != suit_index; // 如果花色不同则返回真,表示牌1大
}
int main() {
int card1 = 54, card2 = 7; // 输入示例,实际游戏中用户输入
if (guess_order(card1, card2))
printf("卡牌顺序正确。\n");
else
printf("卡牌顺序错误。\n");
return 0;
}
```
阅读全文