JD3. 小东分苹果
描述
果园里有一堆苹果,一共n头(n大于1小于8)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个?
输入描述
给定一个整数n,表示熊的头数输出描述
返回最初的苹果数。保证有解。示例1
输入:
2
输出:
3
C++ 解法, 执行用时: 2ms, 内存消耗: 404KB, 提交时间: 2021-12-10
class Apples { public: int getInitial(int n) { // write code here // assert(n > 1); // assert(n < 10); int start = 0; while(1) { int res = start, idx = 0; while(idx<n && !(res%(n - 1))) { res = res/(n - 1)*n + 1; ++idx; } if(idx == n) return res; start += n-1; } return -10086; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 420KB, 提交时间: 2021-09-11
class Apples { public: int getInitial(int n) { // write code here return pow(n, n) + 1 - n; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 424KB, 提交时间: 2022-06-15
class Apples { public: int getInitial(int n) { // write code here int ans = 1; for(int i=1;i<=n;++i) ans *= n; return ans - n + 1; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 424KB, 提交时间: 2022-06-13
class Apples { public: int getInitial(int n) { // write code here if(n==1)return 1; if(n==2)return 3; int result = 1; for(int i = 1;i<n-1;i++) { result *= n; result += 1; } return (result*(n-1)*n)+1; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 428KB, 提交时间: 2022-07-21
class Apples { public: int getInitial(int n) { //假设苹果总数为x //第一头熊分剩下x-1-(x-1)/n=(x-1)*(1-1/n) 1表示扔掉的苹果,(x-1)/n表示第一头熊拿走的苹果 //第二头熊分剩下(x-1)*(1-1/n) - 1 - ((x-1)*(1-1/n)-1)/n = ((x-1)*(1-1/n)-1)*(1-1/n) // = (x-1)*(1-1/n)*(1-1/n) - (1-1/n) //... //第n头熊分剩下(x-1)*(1-1/n)^n - (1-1/n)^(n-1) //x-1至少为 //解方程得:x = n^n+1-n return pow(n, n)+1-n; } }; //(n-1)/n*x + (n-1)*(n-1)/n - (n-1) = (n-1)/n*x + (n-1)(1-1/n-1) = (n-1)/n*x + (n-1)(-1/n) // = (n-1)/n*x - (n-1)/n // = (n-1)/n*(x-1) // = (x-1)*(1-1/n)