算法第三次上机C题
问题描述
“假设有两个相同的玻璃球,你想确定100层楼中最低楼层,当它们从这层楼掉下来的时候会摔碎。假设球在这一层以下掉落时没有损坏。什么策略可以最大限度地减少试验的跌落次数?”
假设我们只有一个球。我们必须从每一层按顺序从1降到100,最坏的情况下需要100次。
现在想想我们有两个球的情况。假设我们把第一个球从n层掉下来。如果它坏了,我们就剩下一个球了,我们需要从1层按顺序掉到n-1层,最坏的情况下会有n个次掉落(第一个球掉一次,第二个最多掉n-1次)。但是,如果从n层掉落时它没有破裂,我们将问题减少到从n+1层掉落到100层。无论哪种情况,我们都已经试验过一次。所以在最坏的情况下,最小试验数是n的最小值。
您将编写一个程序来确定所需在最坏的情况下的最小试验次数,给定B个球和一个M层建筑。
输入
输入的第一行包含一个整数P(1≤P≤1000),这是后面的数据集数。
每个数据集由包含三(3)个十进制整数值的单行组成:问题编号,后跟空格,后跟球数B(1≤B≤50),后跟空格和建筑物层数M(1≤M≤1000)。
输出
对于每个数据集,使用以下值生成一行输出:
数据集编号(十进制整数)、空格和对应值B和M所需的最小试验数。
样本输入
4
1 2 10
2 2 100
3 2 300
4 25 900
样本输出
1 4
2 14
3 24
4 10
参考文章
https://blog.csdn.net/joylnwang/article/details/6769160
https://www.jianshu.com/p/50103a152617
code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <vector>