二分查找做的小游戏

文章介绍了使用C++编写的两个游戏:一个简单的二分查找游戏用于猜测用户心中的数字,以及一个整蛊游戏,通过乱序输出和二分查找让用户猜测输入的数字。

目录

1.前言

2.游戏(跟二分无关的一个整蛊游戏)

3.二分查找游戏


1.前言

二分代码:

#include <iostream>
using namespace std;
int n, num[1000005],x,q;
int f(int x){
    int l = 0,r = n-1;
    int mid;
    while (l <= r){
        mid = (l+r)/2;
        if (num[mid] == x){
            return mid;
        }
        else if(num[mid] > x){
            r = mid-1;
        }
        else if(num[mid] < x){
            l = mid+1;
        }
    }
    return -1;
}
int main(){
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> num[i];
    }
    cin >> q;
    while (q--){
        cin >> x;
        cout << f(x) << "\n";
    }
    return 0;
}

那是不是可以让c++做一个你想我猜的小游戏呢?

2.游戏(跟二分无关的一个整蛊游戏)

一个比较整蛊的小游戏

首先他会让你输入一个数

然后输出一大堆的字符,最后输出你那个数字

#include <bits/stdc++.h>
#include <unistd.h>
using namespace std;
int main(){
	cout << "我是读心术大师~\n";
	cout << "请你在键盘上随便乱摁几个数我能猜出他是什么~\n";
	string n;
	cin >> n;
	for (int i =0; i < 10; i++){
		cout << "—";
		
    	sleep(1);
	}
	cout << "加载成功!";
	for (int i =0; i < 10000; i++){
		cout << "——";
	}
	cout << "\n你猜的数是:" << n;
    return 0;
}

3.二分查找游戏

通过二分查找的方式乘一到1014去查找你心里想的那个数字.

#include <iostream>
#include <unistd.h>
using namespace std;
int main(){
	cout << "我们来猜数字吧!你想一个1~1024的数字,我会输出一个数字请你告诉我我是猜对了还是猜大了或者猜小了\n";
	int l = 0,r = 1024,m =0;
	int cnt = 0;
	while (l <= r){
		m = (l+r)/2;
		cout << m << "\n";
		cout << "我猜对了吗还是大了或者小了?\n对了:y 大了:b 小了:s";
		char a;
		cin >> a;
		if (a == 's' and m != 1024){
			l = m+1;
		}
		else if (a == 'b' and m != 1){
			r = m-1;
		}
		else if (a == 'y'){
			cout << "哈哈我猜对了";
			return 0;
		}
    	else{
    	    printf("脑瘫~");
    	    break;
		}
    	cnt += 1;
		if (cnt > 10){
        	printf("你要想好一个数哦~\n");
        	printf("别老是换来换去");
        	break ;
		}
	}
}

### 基于二分查找的猜数字游戏实现 以下是基于 Python 的一种实现方式,该程序会自动猜测用户心中设定的一个介于 1 到 100 之间的整数。每次猜测后,用户需提供反馈(大了、小了或正确),从而帮助计算机逐步缩小范围并最终找到答案。 #### 实现代码 ```python def binary_search_game(): low = 1 high = 100 attempts = 0 print("请在心里想好一个 1 到 100 之间的整数,我会尝试猜出来!") while low <= high: mid = (low + high) // 2 attempts += 1 response = input(f"你心中的数字是 {mid} 吗?如果不是,请告诉我 '大' 或 '小': ").strip().lower() if response == "正确": print(f"太棒了!我在第 {attempts} 次尝试中找到了你的数字!") break elif response == "大": high = mid - 1 elif response == "小": low = mid + 1 else: print("请输入有效的反馈 ('大', '小', 或 '正确')!") if low > high: print("似乎出了些问题,无法猜到您的数字,请重新开始游戏吧!") binary_search_game() ``` --- #### 关键点解析 上述代码的核心逻辑在于 **二分查找算法** 的应用: 1. 初始化两个边界 `low` 和 `high` 表示当前可能解所在的区间[^1]。 2. 计算中间值 `mid` 并将其作为本次猜测的结果[^4]。 3. 用户根据实际数值给予反馈(“大”表示目标值更小,“小”表示目标值更大,“正确”则终止游戏)[^3]。 4. 根据用户的反馈调整区间的上下限,重复此过程直至收敛至唯一解[^2]。 时间复杂度为 O(log n),这是因为每轮迭代都将搜索空间减半;而由于仅使用固定数量的变量存储状态信息,因此其空间复杂度亦保持恒定为 O(1)[^4]。 --- #### 注意事项 为了确保游戏顺利运行,请注意以下几点: - 输入应严格遵循提示中的选项(即 “大”,“小” 或者 “正确”),否则可能导致错误判断; - 如果玩家未按照规则操作,则可能会陷入死循环或其他异常情况,故建议加入更多健壮性校验机制以提升用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值