把球变没

把球变没

  • 题目
  • 思路
  • 代码

题目

多多鸡有N个魔术盒子(编号1~N),其中编号为i的盒子里有i个球。
多多鸡让皮皮虾每次选择一个数字X(1 <= X <= N),多多鸡就会把球数量大于等于X个的盒子里的球减少X个。
通过观察,皮皮虾已经掌握了其中的奥秘,并且发现只要通过一定的操作顺序,可以用最少的次数将所有盒子里的球变没。
那么请问聪明的你,是否已经知道了应该如何操作呢?

思路

思路:每次是大于等于X个盒子里的球减少X个,所以如果我们选择最大的N作为X,那么去除的就是 N*1个 ,我们可以把它看做矩形
为了使得矩形的面积最大化,我们不可不断缩减两边的距离,使之趋向于正方形,于是,选取N/2作为点最合适。取完一次后,后面的数
会是依次变为0,1,2…直到N/2-1.然后第一次取剩下的是1-N/2.所以,我们要考虑的就只是1-N/2即可【个数重复不会造成影响】,
一直递归即可。

代码

import java.util.Scanner;
public class MagicBox {
    public static void main(String[] args) {
        Scanner reader=new Scanner(System.in);
        int num=reader.nextInt();//盒子数目
        int nums[]=new int[num];//各组的个数
        for(int i=0;i

总体上看来,经过了多次测试,还是第二种方法速度快一点。
第一种方法测试:
把球变没_第1张图片
第二种方法测试:
把球变没_第2张图片

你可能感兴趣的:(模拟题)