日韩精品中文字幕久久臀_天堂av在线一区_午夜精品视频网站_99r精品视频_国产日韩亚洲欧美_亚洲欧美国产一本综合首页_日本一区二区三区久久久久久久久不 _国产精品高潮视频_久热99视频在线观看_91伊人久久大香线蕉

環球快看點丨C語言通過二分查找實現猜數字游戲

2023-06-18 14:58:03 來源:腳本之家
目錄
二分查找二分查找的思想二分查找的條件二分查找的實現過程代碼舉例猜數字游戲游戲說明猜數字游戲思想代碼實現整體代碼演示

二分查找

題目: 在一個有序數組中查找具體的某個數字n。


(資料圖)

首先我們先定義一個1···10的數組 ,如果7為我們要查找的數字,編寫代碼如下

#include 
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    //  下標          0 1 2 3 4 5 6 7 8 9
    int k = 7;//k是要查找的數字
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
     //sz為數組元素個數
    int flag = 0;//
    for (i = 0; i < sz; i++)
    {
        if (k == arr[i])
        {
            flag = 1;
            printf("找到了,下標是:%d\n", i);
            break;
        }
    }
    if (flag == 0)
        printf("找不到\n");

???????    return 0;
}

但是這個代碼的效率比較低,需要循環多次,所以我們需要用一個效率較高的方法:二分查找又叫 (折半查找)

二分查找的思想

給你一個有序的序列,取中間元素和目標元素進行對比,取其中的一半,丟棄另一半,快速縮小目標元素所在的位置。主要思想還是:快速縮小目標元素所在的區間。

二分查找的條件

1.序列必須是有序的,升序或者降序都可以

2. 序列必須是順序存儲元素的,順序存儲元素主要是可以快速的獲取中間元素(可以通過下標來找到元素)

二分查找的實現過程

分析:假設我們要找的數字為7,在查找過程中要用下標進行查找,此時我們定義左下標為left,右下標為right,中間元素下標為mid,(left+right)/2=mid。當第一次查找沒有找到時,從中間下標向左或向右縮短查找范圍繼續查找,直到找到為止。

以數字7為例:第一次查找(left+right)/2=(0+9)/2=4,下標為4找到的數字為5,此時并沒有找到;第二次查找,因為數字5小于數字7,所以mid+1=left,right不變,向右查找,此時(left+right)/2=(5+9)/2=7,下標為7,找到的數字為8,并沒有找到;第三次查找,因為數字8大于數字7,所以mid-1=right,左下標不變,向左查找,此時(left+right)/2=(5+6)/2=5,下標為5,找到的數字為6,第四次查找,因為6小于7,所以向右查找,(left+right)/2=(6+6)/2=6,下標為6,找到的數字為7。

代碼舉例

#include 
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	// 下標       0 1 2 3 4 5 6 7 8 9
	int k = 7;//k是要查找的數字
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//折半查找(二分查找),前提是數組有序
	int left = 0;
	int right = sz - 1;

	int flag = 0;
	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下標是:%d\n", mid);
			flag = 1;
			break;
		}
	}
	if (flag == 0)
		printf("找不到\n");

	return 0;
}

如果left是一個很大的數,right也是一個很大的數,left+right超出整形能表達的最大值,數據溢出,此時(left+right)/2所求的就不是最大值了這時要怎么辦呢?

我們讓多出的部分除以二在平分,如圖所示

代碼修改

#include 
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//            0 1 2 3 4 5 6 7 8 9
	int k = 7;//k是要查找的數字
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//折半查找(二分查找),前提是數組有序
	int left = 0;
	int right = sz - 1;

	int flag = 0;
	while (left<=right)
	{
		int mid = left + (right - left) / 2;

		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下標是:%d\n", mid);
			flag = 1;
			break;
		}
	}
	if (flag == 0)
		printf("找不到\n");

	return 0;
}

猜數字游戲

游戲說明

1.電腦生成一個1~100的的隨機數

2.猜數字

猜大了 就告訴你:猜大了

猜小了 就告訴你:猜小了

猜對了 就告訴你:恭喜你,猜對了

猜數字游戲思想

首先要打印一個菜單,選擇開始游戲還是退出游戲

其次,游戲應該可以玩完一局之后玩一局,為循環進行,利用循環語句構建框架

代碼實現

打印菜單

void menu()
{
    printf("*****************************\n");
    printf("*********   1. play  ********\n");
    printf("*********   0. exit  ********\n");
    printf("*****************************\n");
}

打印結果

打印主函數

int main()
{
    int input = 0;
    do
    {
        menu();
        printf("請選擇:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("猜數字\n");
            break;
        case 0:
            printf("退出游戲\n");
            break;
        default:
            printf("選擇錯誤\n");
            break;
        }
    } while (input);
    return 0;
}

此時游戲過于簡單,選擇1要開始游戲,所以我們定義一個游戲函數game()

打印游戲函數

游戲第一步:生成隨機數

rand()函數為生成隨機數函數,頭文件為

rand會返回一個0~327637之間的數

使用rand()要搭配srand() 一起使用,srand()是設置隨機數生成器,一般用時間戳作為時間的種子,所以使用time函數來獲取時間,然后將time函數轉換為(unsigned)類型在傳給srand函數

void game()
{
    //1. 生成隨機數
    int ret = rand() % 100 + 1;//0~99+1-->1~100
    //2. 猜數字
    int guess = 0;
    while (1)
    {
        printf("請猜數字:>");
        scanf("%d", &guess);
        if (guess < ret)
        {
            printf("猜小了\n");
        }
        else if (guess > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("恭喜你,猜對了\n");
            break;
        }
    }
}

整體代碼演示

#include 
#include 
#include 

void menu()
{
	printf("*****************************\n");
	printf("*********   1. play  *******\n");
	printf("*********   0. exit  ********\n");
	printf("*****************************\n");
}
//
//rand函數會返回一個0~32767之間的隨機數
//
//時間戳

void game()
{
	//1. 生成隨機數
	int ret = rand() % 100 + 1;//0~99+1-->1~100
	//2. 猜數字
	int guess = 0;
	while (1)
	{
		printf("請猜數字:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜對了\n");
			break;
		}
	}
}

int main()
{
	int input = 0;
	//設置了隨機數的生成器
	srand((unsigned int)time(NULL));
    //給srand傳一個時間戳,是生成的數字足夠隨機
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}

游戲效果演示

以上就是C語言通過二分查找實現猜數字游戲的詳細內容,更多關于C語言猜數字的資料請關注腳本之家其它相關文章!

關鍵詞:

相關新聞

日韩精品中文字幕久久臀_天堂av在线一区_午夜精品视频网站_99r精品视频_国产日韩亚洲欧美_亚洲欧美国产一本综合首页_日本一区二区三区久久久久久久久不 _国产精品高潮视频_久热99视频在线观看_91伊人久久大香线蕉
中文字幕一区av| 国产日韩精品一区二区三区| 91超碰这里只有精品国产| 美女高潮久久久| 国产精品女主播在线观看| 欧美午夜精品电影| 国产美女主播视频一区| 亚洲一区电影777| 日本一区二区三区视频视频| 欧美一级在线视频| 欧美手机在线视频| 在线视频你懂得一区二区三区| 国产一区二区三区国产| 免费看欧美女人艹b| 亚洲综合色噜噜狠狠| 国产精品家庭影院| 国产欧美一区二区在线| 精品免费一区二区三区| 91精品欧美福利在线观看| 制服丝袜亚洲精品中文字幕| 欧美日韩另类国产亚洲欧美一级| 在线视频观看一区| 欧美天堂亚洲电影院在线播放| 99re热这里只有精品免费视频| 99久免费精品视频在线观看| 99re免费视频精品全部| 91欧美激情一区二区三区成人| kk眼镜猥琐国模调教系列一区二区| 成人精品国产免费网站| 91在线一区二区| 91无套直看片红桃| 欧美在线观看视频一区二区三区 | 色婷婷av一区二区三区gif| 白白色亚洲国产精品| 色久优优欧美色久优优| 欧美三片在线视频观看| 在线电影国产精品| 久久噜噜亚洲综合| 中国av一区二区三区| 亚洲影院理伦片| 麻豆国产欧美一区二区三区| 丰满白嫩尤物一区二区| 色欧美日韩亚洲| 欧美一卡2卡三卡4卡5免费| 国产亚洲精品bt天堂精选| 亚洲品质自拍视频| 老色鬼精品视频在线观看播放| 国产乱人伦偷精品视频免下载| 成人av在线资源| 欧美影院精品一区| 精品日韩欧美在线| 中文字幕日韩精品一区| 亚洲一区二区成人在线观看| 黄页视频在线91| 99re在线精品| 精品久久久三级丝袜| 亚洲综合色网站| 国产麻豆9l精品三级站| 欧美三级电影网站| 中文字幕在线观看一区二区| 久久99热这里只有精品| 91国产免费看| 国产精品美女视频| 国产一区高清在线| 91精品国产综合久久婷婷香蕉| 中文字幕一区二区在线播放| 国产一区二区女| 91.麻豆视频| 亚洲国产美女搞黄色| 波多野结衣中文字幕一区| 欧美成人一区二区三区在线观看 | 亚洲精品欧美激情| 成人av在线资源网| 国产亚洲一区二区三区四区| 热久久久久久久| 91精品国产高清一区二区三区 | 欧美欧美午夜aⅴ在线观看| 国产精品久久久久久户外露出| 国产一区二区中文字幕| 678五月天丁香亚洲综合网| 亚洲地区一二三色| 欧美色涩在线第一页| 亚洲高清三级视频| 色综合一个色综合亚洲| 亚洲丝袜另类动漫二区| 99国产精品国产精品毛片| 国产精品国产三级国产专播品爱网| 国产美女精品在线| 国产亚洲一区二区在线观看| 粉嫩aⅴ一区二区三区四区五区| 国产日韩精品一区二区浪潮av| 国产99精品视频| 国产精品卡一卡二| 日本韩国欧美在线| 日韩 欧美一区二区三区| 亚洲精品一区二区三区99| 国产成人精品网址| 欧美激情中文字幕一区二区| 91色综合久久久久婷婷| 亚洲成人动漫一区| 欧美不卡一区二区| 国产 欧美在线| 亚洲美女区一区| 91精品国产欧美一区二区18| 国产毛片精品一区| 尤物av一区二区| 精品国产污污免费网站入口 | 精品中文字幕一区二区| 国产日韩综合av| 91色视频在线| 美女在线观看视频一区二区| 国产亚洲欧美日韩俺去了| 91成人免费在线| 极品销魂美女一区二区三区| **网站欧美大片在线观看| 欧美一区二区在线不卡| 成人av电影在线观看| 日韩电影在线免费观看| 国产精品久久久久久久久快鸭| 91精品在线一区二区| 99精品久久只有精品| 男人的天堂久久精品| 国产精品三级视频| 日韩精品综合一本久道在线视频| 99久久777色| 国产精品综合一区二区| 视频一区国产视频| 一区二区视频在线看| 久久人人超碰精品| 欧美一卡二卡在线| 欧美亚一区二区| 色综合天天综合网天天看片| 国产福利91精品一区二区三区| 丝袜诱惑亚洲看片| 日韩一区二区三区四区| 色悠久久久久综合欧美99| 国产精品一级在线| 麻豆极品一区二区三区| 日本欧美一区二区三区乱码| 欧美a一区二区| 韩日av一区二区| 九九**精品视频免费播放| 亚洲va天堂va国产va久| 亚洲色图欧美激情| 国产精品网曝门| 久久蜜桃一区二区| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩高清一区二区| 欧美日韩视频第一区| 在线一区二区三区| 成人性生交大片免费看中文 | 一区二区三区免费看视频| 综合久久久久久| 亚洲精品国产a| 一区二区三区在线影院| 午夜精品久久久久久久久久久| 日韩综合在线视频| 日本成人超碰在线观看| 国产一区三区三区| av激情综合网| 欧美怡红院视频| 欧美变态tickle挠乳网站| 精品久久久久久无| 国产精品萝li| 亚洲国产美女搞黄色| 国产在线不卡一卡二卡三卡四卡| 国产成人精品网址| 不卡在线视频中文字幕| 欧美日韩aaa| 久久久久99精品国产片| 亚洲精品大片www| 看片网站欧美日韩| 成人三级在线视频| 欧美日韩亚洲另类| 亚洲精品一区二区三区99| 国产精品久久久久久久久搜平片| 亚洲一二三四区| 日本成人在线电影网| 成人免费毛片嘿嘿连载视频| 欧美日韩国产精选| 久久久777精品电影网影网 | 国产日韩精品一区二区三区 | 亚洲欧洲精品一区二区三区 | 免费一级片91| 成人黄色小视频| 欧美大黄免费观看| 亚洲乱码日产精品bd| 精品一区二区三区欧美| 91国偷自产一区二区三区观看 | 中文字幕第一页久久| 亚洲精选视频在线| 国产在线看一区| 欧美在线啊v一区| 综合久久一区二区三区| 激情综合五月婷婷| 欧美久久久影院| 一区二区三区免费网站| 色综合视频在线观看| 亚洲国产精品ⅴa在线观看| 国产一区二区不卡老阿姨|