题目描述
果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?
输入
输入1个整数,表示熊的个数。它的值大于1并且小于9。
| 样例输入
5
|
输出
为1个数字,表示果园里原来有的苹果个数。
| 样例输出
3121 |
解题思路:这个题目以前见过类似的,还做对过。但这次刚开始的时候掉坑里了,说下我刚开始的解题思路。
题目中要求最少,也就是苹果的数量需要满足n次平分的条件。我刚开始误认为算出最后一只熊平分的最少数量,在往前面乘,就得到最终的数量。测试了一下,样例就错了,交上去当然也错了。为什么错了?可以说自己考虑的不全面,保证了局部最小,而忽略了整体。所以从整体的情况来考虑,就与自己原来的思路反过来了,从第一只熊平分开始考虑,从n+1开始循环计算,直到找到满足n次平分条件的数为止,此时的数就是最终结果。
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
/*int num=n+1;
for(;;num++){
if(num%n==1)
break;
}
int sum = num;
//System.out.println(num);
for(int i =0;i< n-1;i++){
sum = sum*n+1;
}
System.out.println(sum);*/
//way1
/*
int sum = 1;
for(int i=0;i<n;i++)
sum = sum*n;
System.out.println(sum -n +1);*/
//way2
int i;
for(i = n+1;;i++){
int tmp = i;
int numOfbear = n;
while(numOfbear>0){
if(tmp%n==1){
tmp = tmp - tmp/n -1;
numOfbear--;
}else{
break;
}
}
if (numOfbear == 0){
System.out.println(i);
return;
}
}
}
}
上述代码中,借鉴了大佬的数列推倒公式,https://blog.csdn.net/sinat_27339001/article/details/79870541
共勉:越努力越幸运~~~