2.猜数字
2016-04-05 20:52
176 查看
A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" 。 <br>问B猜n次可以猜到的最大数。 <br>
[align=left]Input[/align]
第1行是整数T,表示有T组数据,下面有T行 <br>每行一个整数n (1 ≤ n ≤ 30) <br>
[align=left]Output[/align]
猜n次可以猜到的最大数<br>
[align=left]Sample Input[/align]
213
[align=left]Sample Output[/align]
17
这个问题可以看成是二分查找逆运算。设最大数为k,就是说在1到k这个范围内,m次可以找到这个范围内的任何一个数。例如:最大数为9,要找的是7,先,猜9,大了,二分猜5,小了,二分猜7.三次。根据这个规律,可以得出,k = 2^m - 1.代码:#include<iostream>
using namespace std;
int main()
{
int p,sum,m;
cin>>p;
while(p)
{
--p;
sum=1;
cin>>m;
for(int i=1;i<=m;++i)
{
sum = sum*2;
}
cout<<sum-1<<endl;
}
}
[align=left]Input[/align]
第1行是整数T,表示有T组数据,下面有T行 <br>每行一个整数n (1 ≤ n ≤ 30) <br>
[align=left]Output[/align]
猜n次可以猜到的最大数<br>
[align=left]Sample Input[/align]
213
[align=left]Sample Output[/align]
17
这个问题可以看成是二分查找逆运算。设最大数为k,就是说在1到k这个范围内,m次可以找到这个范围内的任何一个数。例如:最大数为9,要找的是7,先,猜9,大了,二分猜5,小了,二分猜7.三次。根据这个规律,可以得出,k = 2^m - 1.代码:#include<iostream>
using namespace std;
int main()
{
int p,sum,m;
cin>>p;
while(p)
{
--p;
sum=1;
cin>>m;
for(int i=1;i<=m;++i)
{
sum = sum*2;
}
cout<<sum-1<<endl;
}
}
相关文章推荐
- QT学习笔记——“const"
- #leetcode#283. Move Zeroes
- 分类-3-生成学习-1-问题引入
- P值已经被废,学的东西有多少是真的?
- 【原】Spark中Stage的提交源码解读
- 【转】深入剖析Java中的装箱和拆箱
- Codeforces Round #345 (Div. 1) & CodeForces 650A Watchmen
- android.view.GLES20RecordingCanvas.drawBitmap异常
- 第5周项目4-长方柱类
- HDU 4123(RMQ(o1)模板 , 树直径)
- 如何阻止移动设备(手机,pad)浏览器双击放大网页?
- Fresco-Facebook的图片加载框架的使用
- BZOJ 2209: [Jsoi2011]括号序列&&BZOJ 2329: [HNOI2011]括号修复
- codevs2370小机房的树
- 使用Classie.js让添加、删除和检查类更容易
- iOS安全–在非越狱平台进行越狱开发(附分析流程)
- 《LeetBook》leetcode题解(3):Longest Substring Without Repeating Characters[M]——哈希判断重复
- 《LeetBook》leetcode题解(3):Longest Substring Without Repeating Characters[M]——哈希判断重复
- 第四周总结
- Linux kill 命令