main()
{ int low,high,mid,n
while(1){
mid=15low=0high=31
printf("你的生日比%d号大还是小?大输入1,小输入2,等于3.\n",mid)
scanf("%d",&n)
while(n!=3){
if(n==1)low=mid+1
if(n==2)high=mid-1
mid=(low+high)/2
printf("你的生日比%d号大还是小?大输入1,小输入2,等于3.\n",mid)
scanf("%d",&n)
}
printf("你的生日是%d号\n",mid)
}
}
如图所示,望采纳。。。。。。
Dim count1 As IntegerPrivate Sub Command1_Click()
count1 = count1 / 2
text
End Sub
Private Sub Command2_Click()
count1 = count1 + count1 / 2
text
End Sub
Private Sub Command3_Click()
MsgBox "恭喜你猜对了!", 65, "提示!"
End Sub
Private Sub Form_Load()
count1 = 16
text
End Sub
Private Sub text()
Form1.Caption = "生日是" &Str(count1)
End Sub
能用5次判断就能找出生日的话,应该是用了二分查找吧,
二分查找是取中间数,然后查看被查数是否大于或者小于这个中间数(当然等于的话就不用进行下面的判断了),接着改变查找区域继续查找,举个例子:要是被查数是3的话
1---15---30 15比3大,取15当最大值
1--7---15 7比3大,取7当最大值(取7不取8是因为C++里面int型除2没有四舍五入。。。)
1--3---7取出3是相等的,于是找到生日日期了。
同理,你要是想求月份的话,应该就是4次吧(心算的,大概是4。。。)
觉得不是很理解的话,也可以百度找找二分查找的解释看看。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)