赛码网--分苹果(Java实现)

题目描述
									

果园里有堆苹果,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 

共勉:越努力越幸运~~~

猜你喜欢

转载自blog.csdn.net/yong_zi/article/details/81517538