首页 > 试题广场 >

扭蛋机

[编程题]扭蛋机
  • 热度指数:11934 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
22娘和33娘接到了小电视君的扭蛋任务:
一共有两台扭蛋机,编号分别为扭蛋机2号和扭蛋机3号,22娘使用扭蛋机2号,33娘使用扭蛋机3号。
扭蛋机都不需要投币,但有一项特殊能力:
扭蛋机2号:如果塞x(x范围为>=0整数)个扭蛋进去,然后就可以扭到2x+1个
扭蛋机3号:如果塞x(x范围为>=0整数)个扭蛋进去,然后就可以扭到2x+2个
22娘和33娘手中没有扭蛋,需要你帮她们设计一个方案,两人“轮流扭”(谁先开始不限,扭到的蛋可以交给对方使用),用“最少”的次数,使她们能够最后恰好扭到N个交给小电视君。

输入描述:
输入一个正整数,表示小电视君需要的N个扭蛋。


输出描述:
输出一个字符串,每个字符表示扭蛋机,字符只能包含"2"和"3"。
示例1

输入

10

输出

233

备注:
1<=N<=1e9
认真读题
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        StringBuilder sb = new StringBuilder();
        while(n > 0) {
            if(n % 2 == 0) {
                n = (n - 2)/2;
                sb.append("3");
            } else {
                n = (n - 1)/2;
                sb.append("2");
            }
        }
        System.out.println(sb.reverse());
    }
}


发表于 2023-01-07 10:14:42 回复(0)
import java.util.*;
public class Main{
    static int min;
    static String result;
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        StringBuilder str = new StringBuilder("");
        while(n>0){
            if(n%2==0){
                str.append("3");
                n=n/2-1;
            }else{
                str.append("2");
                n=(n-1)/2;
            }
        }
        System.out.println(str.reverse());
    }
}

发表于 2022-05-19 23:13:53 回复(0)
使用倒推的方式求解。
且扭蛋个数为正整数,因此,不管是选择2号还是3号,都要%2 == 0;
由此,代码如下:
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        StringBuffer sb = new StringBuffer();
        //递归
        while(n > 0){
            if((n - 1)% 2 == 0){
                n = (n - 1)/2;
                sb.append('2');
            }else{
                n = (n - 2)/2;
                sb.append('3');
            }
        }

        sb.reverse();
        System.out.println(sb.toString());
    }

}

发表于 2022-04-29 14:59:09 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        StringBuilder bur = new StringBuilder();
        while(n != 0){
            if(n%2 == 0){
                n = (n-2)/2;
                bur.append("3");
            }else{
                n = (n-1)/2;
                bur.append("2");
            }
        }
        String s = bur.reverse().toString();
        System.out.println(s);
    }
}
发表于 2019-11-20 15:43:49 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){
                int num = sc.nextInt();
                StringBuilder res = new StringBuilder();
                while(num != 0){
                    if(num % 2 == 0){
                        num = (num - 2) / 2;
                        res.insert(0, "3");
                    }else{
                        num = (num - 1) / 2;
                        res.insert(0, "2");
                    }
                }
                System.out.println(res);
            }
    }
}
发表于 2019-06-23 12:32:36 回复(1)

热门推荐

通过挑战的用户

查看代码