就1个折半查找嘛。。。。
简单写了个,貌似不太合题意,但7步以内能猜到任何1-100的数字,因为我要求回答电脑的答案是3个,1,是,2,等,0,不是。可能不和要求,你看了后具体提下问题该怎么问,反正我觉得这种要求3种答案的像是作弊,呵呵。因为涉及是否等于边界的问题,50、25(75)、38(63、87)……我觉得还非得加入“等于”这个答案才解得出来。另外,我每行基本上都有tab键让格式美观的……到了网页上貌似tab这个纠结的键的原因让代码。。。你编译之前Cril+A全选然Alt+F8整理格式吧。C++源码:
#include
using namespace std;
int main()
{
int Num[100];
int i,n = 0,mid,high = 99,low = 0,flag1 = 0,flag2; //flag1代表找没找到,flag2表示电脑问题答案的与否
int goal;
for(i = 0;i < 100;i ++)
{
Num[i] = i + 1;
}
cout<<"当电脑提问后请输入1代表大于,2代表等于,0代表小于"<
{
goal = (Num[high] + Num[low]) / 2;
mid = (high + low) / 2;
cout<<"你要找的数大于"<
cin>>flag2;
if(n == 7 && goal == 99 && flag2 == 1) //对100特殊处理,没有这个if语句,当你想着100时
{ //你会输入7个1,然后程序告诉你输入错误或者在耍他。
flag1 = 2; //对应的如果连续输入7个0的话你想着的数字绝对是
break; //小于1的,程序可以判断,这个if只是针对100这个特殊数字
} //可能是因为你要找1-100,而建立数组是0-99的原因吧
if(flag2 == 1) //写程序测试的时候就要注意边界问题。
{
low = mid;
}
else if(flag2 == 0)
{
high = mid;
}
else
{
flag1 = 1;
break;
}
}
if(flag1 == 1)
{
cout<<"你的数字是"<
else if(flag1 == 2) //对100特殊处理的结果输出
{
cout<<"你的数字是"<<100<
else
{
cout<<"你输入错误或者你在耍我"<
return 0;
}
9