描述
海滩上有一堆桃子,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 ", dp[n ]*n+1); 36 return 0; 37 }
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 ", y); 27 break; 28 } 29 return 0; 30 }
以上是正常解法
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 ", 7); return 0; } 20 ans = pow(n, n); 21 ans -= (n - 1); printf("%d ", ans); 22 return 0; 23 }
不明觉厉的找规律解法……