题目描述
果园里有一堆苹果,一共n头(n大于1小于9)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个。
给定一个整数n,表示熊的个数,返回最初的苹果数。保证有解。
测试样例:
2
返回:3
思路
推公式:
根据excel列出的表可以得出解是有规律性的,可以推公式。
最后剩的苹果数
res
是(pow(n-1, n-1) - 1)*(n-1)
,一开始的苹果数可以通过循环n次res*n/(n-1) + 1
可以得到。
题解1
class Apples {
public:
int getInitial(int n) {
int res = (pow(n-1, n-1)-1)*(n-1);
for(int i=0;i<n;i++){
res = res*n/(n-1) + 1;
}
return res;
}
};
(pow(n-1, n-1) - 1)*(n-1)
乘以n
,除以n-1
,再加1
,循环n次可以得到pow(n, n) - n + 1
,所以一开始的苹果数可以通过pow(n, n) - n + 1
得出。
题解2
class Apples {
public:
int getInitial(int n) {
return pow(n, n)-n+1;
}
};