18.06.27 POJ NOI 7217猴子吃桃

描述

    海滩上有一堆桃子,N只猴子来分。第一只猴子把这堆桃子平均分为N份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子接着把剩下的桃子平均分成N份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第三、第四、……,第N只猴子仍是最终剩下的桃子分成N份,扔掉多了的一个,并拿走一份。
    编写程序,输入猴子的数量N,输出海滩上最少的桃子数,使得每只猴子都可吃到桃子。

输入

一个整数N。

输出

输出当猴子数量为N时海滩上最少的桃子数。结果保证在int型范围内。

样例输入

2

样例输出

7
 1 #include <cstdio>
 2 #include <string>
 3 #include <memory.h>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 #include <iostream>
 8 #include<queue>
 9 #include <vector>
10 #include <bitset>
11 using namespace std;
12 
13 int n;
14 int dp[1000];
15 
16 int main()
17 {
18     scanf("%d", &n);
19     dp[1] = 1;
20     while(1)
21     {
22         int flag = true;
23         for (int i = 2; i <= n ; i++)
24         {
25             dp[i] = (dp[i - 1] * n + 1) / (n - 1);
26             if (dp[i] * (n - 1) != dp[i - 1] * n + 1) {
27                 dp[1]++;
28                 flag = false;
29                 break;
30             }
31         }
32         if (flag)
33             break;
34     }
35     printf("%d\n", dp[n ]*n+1);
36     return 0;
37 }
View Code
 1 #include <cstdio>
 2 #include <string>
 3 #include <memory.h>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 #include <iostream>
 8 #include<queue>
 9 #include <vector>
10 #include <bitset>
11 using namespace std;
12 
13 int n;
14 
15 int main()
16 {
17     scanf("%d", &n);
18     for (int i = 1;; i++) {
19         int y = i * n + 1;
20         int j = 1;
21         for (; j < n; j++) {
22             if (y % (n - 1) != 0)break;
23             y = y / (n - 1)*n + 1;
24         }
25         if (j != n)continue;
26         printf("%d\n", y);
27         break;
28     }
29     return 0;
30 }
View Code

以上是正常解法

 1 #include <cstdio>
 2 #include <string>
 3 #include <memory.h>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 #include <iostream>
 8 #include<queue>
 9 #include <vector>
10 #include <bitset>
11 using namespace std;
12 
13 int n;
14 
15 int main()
16 {
17     int n, i, ans = 1;
18     scanf("%d", &n);
19     if (n == 2) { printf("%d\n", 7); return 0; }
20     ans = pow(n, n);
21     ans -= (n - 1); printf("%d\n", ans);
22     return 0;
23 }
View Code

不明觉厉的找规律解法……

猜你喜欢

转载自www.cnblogs.com/yalphait/p/9234154.html