2020年牛客网bilili面试题

@爱耍流氓的唐僧  March 17, 2021

1.题目描述
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

理解:题目看出来2号机只能扭出奇数个,3号机扭出偶数个,反向推到,例如10 只能在3号机扭出,(10-2)/2 =4 需要4个,4只能在3号机,(4-2)/2 = 1,1只能在2号机,得出233  .....
package main

import "fmt"

var x int

func main(){
    fmt.Scanln(&x)
    i:=0
    var str []byte
    for {
        if x<=0 {
            break
        }
        if x%2 == 0{
            x = (x-2)/2
            str = append(str,'3')
        }else{
            x = (x-1)/2
            str = append(str,'2')
        }
        i++
    }
    var result []byte
    length := len(str)
    for i := 0; i < length; i++ {
        result = append(result, str[length-i-1])
    }
    fmt.Println(string(result))
}

添加新评论