实例:看商品猜价格
首先出示一件价格在99元以内的商品,参与者要猜出这件商品的价格。在猜价格的过程中,主持人会根据参与者给出的价格,相应地给出“高了”或“低了”的提示。
如果商品的价格是40
二分法猜商品价格:
次数 | 价格区间 | 中间值 |
|
第 1 次 | 0~99 | 50 | 高了 |
第 2 次 | 0~50 | 25 | 低了 |
第 3 次 | 25~50 | ≈38 | 低了 |
第 4 次 | 38~50 | 42 | 高了 |
第 5 次 | 38~42 | 40 | 正好 |

每次都取两个数中间的数,把这个数和最终的数相比较,通过这样的比较,缩小查找的范围,找到最终要找的数。
代码实现:
- #include <iostream>
- #include <stdlib.h>
- int main()
- {
- int oldprice,price=0,i=0; //oldprice实际商品的价格,price游戏参与者猜的价格 ,i猜的次数
- printf("请首先设置商品的真实价格:");
- scanf("%d",&oldprice);
- system("cls"); //清屏
- printf("请输入试猜的价格:\n");
- while(oldprice!=price) //实际价格和参与者价格不同,继续循环
- {
- i++;
- printf("参与者:");
- scanf("%d",&price);
- printf("主持人:") ;
- if(price>oldprice)
- {
- printf("高了\n");
- }
- else if(price<oldprice)
- {
- printf("低了\n");
- }
- else
- {
- printf("恭喜你,答对了,该商品属于你了!\n\n你一共试猜了%d次.\n",i);
- }
- }
- system ("pause");//输出完结果后停在控制台
- return 0;
- }
#include <iostream>
#include <stdlib.h>
int main()
{
int oldprice,price=0,i=0; //oldprice实际商品的价格,price游戏参与者猜的价格 ,i猜的次数
printf("请首先设置商品的真实价格:");
scanf("%d",&oldprice);
system("cls"); //清屏
printf("请输入试猜的价格:\n");
while(oldprice!=price) //实际价格和参与者价格不同,继续循环
{
i++;
printf("参与者:");
scanf("%d",&price);
printf("主持人:") ;
if(price>oldprice)
{
printf("高了\n");
}
else if(price<oldprice)
{
printf("低了\n");
}
else
{
printf("恭喜你,答对了,该商品属于你了!\n\n你一共试猜了%d次.\n",i);
}
}
system ("pause");//输出完结果后停在控制台
return 0;
}
结果:
二分法可以这么理解:有一块蛋糕,蛋糕上面有一颗草莓,现在要找到这颗草莓的具体,我们先把蛋糕分为两块,在这两块中查找,再将有草莓的那块分为两块,继续这样分下去,最终确定草莓的具体位置(这里是等分为两块,这个例子也可以说的分块查找,但是分块查找与二分法不等价)
二分法查找要求线性表是有序表,即表中结点按关键字有序。只适用于顺序存储结构。二分法查找为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。所以二分法查找特别适用于一经建立就很少改动,但又经常需要查找的线性表。