解题思路: 考虑测试n次能支持的最大层数的关系。
首先考虑只有一部手机的时候,因为只有一部手机所以我们只能从第一层开始,一层一层的往上试
因此次数与最大层数的关系为:F1(n)=n;
然后我们考虑有两部手机的时候,因为题目说了是运气最差的时候,所以我们首先从哪里开始扔第一个手机也就没什么区别了,我们扔第一部手机有两种情况
(1)手机碎了,那你现在就只有一步手机了,那就由和只有一部手机时候一样了,不过此时,你已经扔过一次了所以:
F1(n-1)+1
(2)手机,没碎,你现在有两部手机,n-1次测试次数 :
F2(n-1)
总的来看,当你有两部手机的时候
F2(n)=F2(n-1)+1+F1(n-1)
然后就简单了,当我们有三部手机的时候,你随便先扔一部,又是有两种可能,所以:
F3(n)=F3(n-1)+F2(n-1)+1
注意事项:
参考代码:
#include<bits/stdc++.h> using namespace std; int f2[105], f3[105]; int main() { int n; cin >> n; int i = 0; while(f3[i] < n){ i++; f2[i] = f2[i-1] + i;//这里i本身就++了,所以不用加一了 f3[i] = f3[i-1] + f2[i-1] + 1; } cout << i << endl; return 0; }
0.0分
14 人评分
采药 (C++代码)浏览:1265 |
【蟠桃记】 (C语言代码)浏览:785 |
假币问题 (C++代码)(向上取整的一种处理方式)浏览:1660 |
C语言训练-大、小写问题 (C语言代码)浏览:2349 |
母牛的故事 (C语言代码)浏览:435 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:779 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:612 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:738 |
剪刀石头布 (C语言代码)浏览:748 |
交换Easy (C语言代码)浏览:759 |