2018-9-21 嗶哩嗶哩筆試程式設計題
阿新 • • 發佈:2018-12-11
22娘和33娘接到了小電視君的扭蛋任務:
一共有兩臺扭蛋機,編號分別為扭蛋機2號和扭蛋機3號,22娘使用扭蛋機2號,33娘使用扭蛋機3號。
扭蛋機都不需要投幣,但有一項特殊能力:
扭蛋機2號:如果塞x(x範圍為>=0正整數)個扭蛋進去,然後就可以扭到2x+1個
扭蛋機3號:如果塞x(x範圍為>=0正整數)個扭蛋進去,然後就可以扭到2x+2個
22娘和33娘手中沒有扭蛋,需要你幫她們設計一個方案, 兩人“輪流扭”(誰先開始不限,扭到的蛋可以交給對方使用), 用“最少”的次數,使她們能夠最後恰好扭到N個交給小電視君。
輸入 輸入一個正整數,表示小電視君需要的N個扭蛋。 10
輸出 輸出一個字串,每個字元表示扭蛋機,字元只能包含"2"和"3"。 233
輸入:10
輸出:233
思路:正向向上加到 N,比較難辦到;但是倒著想,就好辦多了;
首先肯定是優先3號機,N減小得快;
10 = 2 * 4 + 2; 3
4 = 2 * 1 + 2;3
1 = 2 * 0 + 1; 2
11 = 2 * 5 + 1; 2
5 = 2 * 2 + 1; 2
2 = 2 * 0 + 2; 3
是不是有想法了
public static void main(String[] args) { /* Scanner sc = new Scanner(System.in); int N = sc.nextInt();*/ int N = 1232; StringBuilder builder = new StringBuilder(); help(N,builder); System.out.println(builder.reverse().toString()); } public static void help(int n, StringBuilder builder) { if (n <= 0) { return; } if (n % 2 == 0) { builder.append("3"); help((n - 2) / 2, builder); } else { builder.append("2"); help((n - 1) / 2, builder); } }
最後再把拿到的數字倒序輸出就OK了