C語言巧用二分查找實現(xiàn)猜數(shù)游戲

?? 文章Gitee倉庫:文章源代碼
(壹)二分查找
?? 1.1 何為二分查找
折半查找,也稱二分查找,在某些情況下相比于順序查找,使用折半查找算法的效率更高。但是該算法的使用的前提是靜態(tài)查找表中的數(shù)據(jù)必須是有序的。
例如,在{5,21,13,19,37,75,56,64,88 ,80,92}這個查找表使用折半查找算法查找數(shù)據(jù)之前,需要首先對該表中的數(shù)據(jù)按照所查的關(guān)鍵字進(jìn)行排序:{5,13,19,21,37,56,64,75,80,88,92}。
?? 1.2 二分查找的原理
以升序數(shù)列為例,比較一個元素與數(shù)列中的中間位置的元素的大小,如果比中間位置的元素大,則繼續(xù)在后半部分的數(shù)列中進(jìn)行二分查找;如果比中間位置的元素小,則在數(shù)列的前半部分進(jìn)行比較;如果相等,則找到了元素的位置。每次比較的數(shù)列長度都會是之前數(shù)列的一半,直到找到相等元素的位置或者最終沒有找到要找的元素。
動圖演示:(于順序查找相比較)

?
?? 1.3 查找條件
二分查找的前提條件是有序數(shù)列,普通查找則不需要。
查找到返回該元素的下標(biāo),否則返回-1。
普通查找的時間復(fù)雜度為O(N), 二分查找的時間復(fù)雜度為O(logN)。 N/2/2···/2=1,2^m=N(m為折半查找的次數(shù)),那么m=log(N),二分查找的時間復(fù)雜度就為O(logN)。
?? 1.4 代碼實現(xiàn)

?? 1.4.1 初始化數(shù)據(jù)

?? 1.4.2 核心函數(shù)


(貳)猜數(shù)字游戲
?? 2.1 菜單初始化

?? 2.2 核心函數(shù)

?? 2.3 main函數(shù)

?? 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函數(shù)能返回隨機(jī)數(shù)的最大值。
void game()
{
int random_num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("請輸入猜的數(shù)字>:");
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;
}

到此這篇關(guān)于C語言巧用二分查找實現(xiàn)猜數(shù)游戲 的文章就介紹到這了,更多相關(guān)C語言 二分查找內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode 配置 C/C++編譯環(huán)境(完整教程)
這篇文章主要介紹了vscode 配置 C/C++編譯環(huán)境(完整教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
C語言中一些將字符串轉(zhuǎn)換為數(shù)字的函數(shù)小結(jié)
這篇文章主要介紹了C語言中一些將字符串轉(zhuǎn)換為數(shù)字的函數(shù)小結(jié),分別為atoi()函數(shù)和atol()函數(shù)以及atof()函數(shù),需要的朋友可以參考下2015-08-08
C++探索構(gòu)造函數(shù)私有化會產(chǎn)生什么結(jié)果
C++的構(gòu)造函數(shù)的作?:初始化類對象的數(shù)據(jù)成員。即類的對象被創(chuàng)建的時候,編譯系統(tǒng)對該對象分配內(nèi)存空間,并?動調(diào)?構(gòu)造函數(shù),完成類成員的初始化。構(gòu)造函數(shù)的特點:以類名作為函數(shù)名,?返回類型2022-05-05
《C++ Primer》隱式類類型轉(zhuǎn)換學(xué)習(xí)整理
在本篇文章里小編給大家整理的是關(guān)于《C++ Primer》隱式類類型轉(zhuǎn)換學(xué)習(xí)筆記內(nèi)容,需要的朋友們參考下。2020-02-02
C++?構(gòu)造函數(shù)學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++?構(gòu)造函數(shù)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Qt將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html
這篇文章主要為大家詳細(xì)介紹了Qt如何實現(xiàn)將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
C++基于reactor的服務(wù)器百萬并發(fā)實現(xiàn)與講解
這篇文章主要介紹了C++基于reactor的服務(wù)器百萬并發(fā)實現(xiàn)與講解,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

