猜扑克牌大小问题二分法递归c++语言源码
时间: 2024-09-26 14:06:05 浏览: 50
二分法.zip_C++_二分法_二分法查找vc++
猜扑克牌大小是一个经典的编程题目,通常用于教学递归算法。在这个问题中,玩家需要猜测一副牌(假设有52张牌,没有大小王)中的某一张牌是否比另一张大。你可以采用二分查找的思想,通过递归的方式不断缩小范围。
以下是使用C++实现的一个简单版本的递归函数:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 判断一张牌是否大于目标值
bool compare_cards(int card, int target) {
return card > target;
}
// 二分查找猜牌函数
int guess_card(vector<int> &deck, int start, int end, int target) {
if (start <= end) {
// 计算中间点
int mid = start + (end - start) / 2;
// 比较当前中间牌与目标
if (compare_cards(deck[mid], target)) {
// 如果中间牌大于目标,缩小左半部分的范围
return guess_card(deck, start, mid - 1, target);
} else if (!compare_cards(deck[mid], target)) {
// 如果中间牌小于等于目标,缩小右半部分的范围
return guess_card(deck, mid + 1, end, target);
} else {
// 直接返回中间牌,因为它是唯一符合条件的
return deck[mid];
}
} else {
// 当搜索范围为空时,说明找不到比目标大的牌
return -1; // 或者抛出异常,表示猜测失败
}
}
int main() {
vector<int> deck(52); // 初始化一副随机排序的牌
// ... 对deck进行填充和排序 ...
int target = 0; // 假设我们要找的牌是第0张(这里简化示例)
int guessed_card = guess_card(deck, 0, deck.size() - 1, target);
if (guessed_card != -1)
cout << "Guess the card is: " << guessed_card << endl;
else
cout << "Failed to guess a card greater than " << target << endl;
return 0;
}
```
阅读全文