解题思路:从1到n的倒数之和。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main(){ int n; while(scanf("%d",&n)!=EOF){ double ans=0; for(int i=1;i<=n;i++){ ans+=(1.0/i); } printf("%.4lf ",ans); } return 0; }
开锁魔法I | |||||
|
|||||
Description | |||||
一日,崔克茜来到小马镇表演魔法。 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它。崔克茜可以通过魔法,暴力打开一个盒子。崔克茜想知道,期望使用多少次魔法可以打开所有盒子,你能帮助她回答吗? |
|||||
Input | |||||
多组测试数据。 每组数据仅一行,有一个整数n。(n <= 10000000) |
|||||
Output | |||||
对于每组询问,输出一行,代表对应的答案。结果保留四位小数。 | |||||
Sample Input | |||||
1 2 |
|||||
Sample Output | |||||
1.0000 1.5000 |
|||||
Hint | |||||
n=2时, 箱子内的钥匙有两种情况:①号箱内有②号箱的钥匙,②号箱内有①号箱的钥匙;需要用一次魔法。 每个箱子内都只有开自己的钥匙;需要用两次魔法。 那么期望使用的魔法次数即为(1+2)/2 = 1.5 次。 n=3时, 巷子内的钥匙分布有六种情况: 1->1 , 2->2 , 3->3;需要用三次魔法。 1->1 , 2->3 , 3->2;需要用两次魔法。 1->2 , 2->3 , 3->1;需要用一次魔法。 1->2 , 2->1 , 3->3;需要用两次魔法。 1->3 , 2->1 , 3->2;需要用一次魔法。 1->3 , 2->2 , 3->1;需要用两次魔法。 因此期望为(3+2+1+2+1+2)/6 = 11/6次。 |