服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言巧用二分查找实现猜数游戏

C语言巧用二分查找实现猜数游戏

2022-09-15 18:15玄澈_ C/C++

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,本篇文章教你用二分查找编写猜数字游戏

C语言巧用二分查找实现猜数游戏

文章Gitee仓库:文章源代码

 

(壹)二分查找

1.1 何为二分查找

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。

例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:{5,13,19,21,37,56,64,75,80,88,92}。

1.2 二分查找的原理

以升序数列为例,比较一个元素与数列中的中间位置的元素的大小,如果比中间位置的元素大,则继续在后半部分的数列中进行二分查找;如果比中间位置的元素小,则在数列的前半部分进行比较;如果相等,则找到了元素的位置。每次比较的数列长度都会是之前数列的一半,直到找到相等元素的位置或者最终没有找到要找的元素。

动图演示:(于顺序查找相比较)

C语言巧用二分查找实现猜数游戏

1.3 查找条件

二分查找的前提条件是有序数列,普通查找则不需要。

查找到返回该元素的下标,否则返回-1。

普通查找的时间复杂度为O(N), 二分查找的时间复杂度为O(logN)。 N/2/2/2=1,2^m=N(m为折半查找的次数),那么m=log(N),二分查找的时间复杂度就为O(logN)。

1.4 代码实现

C语言巧用二分查找实现猜数游戏

1.4.1 初始化数据

C语言巧用二分查找实现猜数游戏

1.4.2 核心函数

C语言巧用二分查找实现猜数游戏

C语言巧用二分查找实现猜数游戏

 

(贰)猜数字游戏

2.1 菜单初始化

C语言巧用二分查找实现猜数游戏

2.2 核心函数

C语言巧用二分查找实现猜数游戏

2.3 main函数

C语言巧用二分查找实现猜数游戏

2.4 总代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("**********************************\n");
	printf("*********** 1.play     ***********\n");
	printf("*********** 0.exit     ***********\n");
	printf("**********************************\n");
}

//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > random_num)
		{
			printf("猜大了\n");
		}
		else if (input < random_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n"); break;
		}
	}
}

int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

C语言巧用二分查找实现猜数游戏

C语言巧用二分查找实现猜数游戏

到此这篇关于C语言巧用二分查找实现猜数游戏 的文章就介绍到这了,更多相关C语言 二分查找内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/forever_bryant/article/details/122519259

延伸 · 阅读

精彩推荐
  • C/C++学C语言的看过来,最完整进制转换、整数和小数内存存储模型

    学C语言的看过来,最完整进制转换、整数和小数内存存储模型

    进制也就是进位计数制,是人为定义的带进位的计数方法。对于任何一种进制---N进制,就表示每一位置上的数运算时都是逢N进一位。...

    C语言基础6992021-03-15
  • C/C++详解C++纯虚函数与抽象类

    详解C++纯虚函数与抽象类

    这篇文章主要介绍了C++纯虚函数与抽象类的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下...

    Dabelv9672021-09-23
  • C/C++详解C语言中getgid()函数和getegid()函数的区别

    详解C语言中getgid()函数和getegid()函数的区别

    这篇文章主要介绍了详解C语言中getgid()函数和getegid()函数的区别,注意getegid只返回有效的组识别码,需要的朋友可以参考下...

    C语言教程网8912021-03-09
  • C/C++VC中删除类的两种操作方法

    VC中删除类的两种操作方法

    这篇文章主要介绍了VC中删除类的两种操作方法,较为详细的描述了在VC中实现删除类的具体步骤,非常具有实用价值,需要的朋友可以参考下 ...

    好人一个9102021-02-26
  • C/C++C语言俄罗斯方块游戏课程设计

    C语言俄罗斯方块游戏课程设计

    这篇文章主要为大家详细介绍了C语言俄罗斯方块游戏课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    C语言教程网6672021-11-16
  • C/C++常用的C语言编程工具汇总

    常用的C语言编程工具汇总

    c语言编程软件适于编写系统软件,是学习编程的同学们的必备软件。c语言一种非常强大的计算机语言,应用非常广泛,不仅仅是在软件开发上,而且各类...

    小辰带你看世界9762021-06-17
  • C/C++C++实现简易通讯录

    C++实现简易通讯录

    这篇文章主要为大家详细介绍了C++实现简易通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    逆风行砾11072021-09-17
  • C/C++VS2019开发Linux C++程序的实现步骤

    VS2019开发Linux C++程序的实现步骤

    由于很多unix特有的函数无法在Windows上使用,而Vim又用的不太顺手,突然想到最初用vs的时候有一个基于Linux的C++开发。本文就来介绍一下,感兴趣的可以了...

    Respect@6582021-11-25