赛码网--分苹果(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 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值