当前位置: 首页 > 面试经验 >

滴滴9/17笔试 后端

优质
小牛编辑
107浏览
2023-03-28

滴滴9/17笔试 后端

第一题没AC,第二题没时间看了。。。bug调了半天,
下面的代码考完又看了下,本地测试可以通过,全当记录。

package main
import (
    "fmt"
)
func main() {
    var str string
    fmt.Scan(&str)
    cnt := []byte(str)
    n, sum, num := len(cnt), 0, 0
    if n == 1 {
        if cnt[0] == '?' {
            fmt.Println(3)
        } else {
            fmt.Println(str)
        }
        return
    }
    for i := 0; i < n; i++ {
        if cnt[i] == '?' {
            num++
        } else {
            sum += int(cnt[i] - '0')
        }
    }
    for i := 0; i < n && num != 0; i++ {
        if i == 0 && cnt[i] == '?' {
            if num == 1 {
                if sum%3 == 0 {
                    cnt[0] = '3'
                } else {
                    cnt[0] = byte(3 - sum%3 + int('0'))
                }
                fmt.Println(string(cnt))
                return
            } else {
                if cnt[1] == '1' {
                    cnt[0] = '2'
                    sum += 2
                } else {
                    cnt[0] = '1'
                    sum += 1
                }
                num--
            }
            continue
        }
        if num > 1 {
            if cnt[i] == '?' && i < n-1 {
                if (cnt[i-1] == '0' && cnt[i+1] == '1') || (cnt[i-1] == '1' && cnt[i+1] == '0') {
                    cnt[i] = '2'
                    sum += 2
                } else if (cnt[i-1] == '0' && cnt[i+1] != '1') || (cnt[i-1] != '1' && cnt[i+1] == '0') {
                    cnt[i] = '1'
                    sum += 1
                } else {
                    cnt[i] = '0'
                }
                num--
            }
        } else {
            if cnt[i] == '?' {
                if i == n-1 {
                    for val := 0; val < 10; val++ {
                        if (sum+val)%3 == 0 && val != int(cnt[i-1]) {
                            cnt[i] = byte(int('0') + val)
                            break
                        }
                    }
                } else {
                    for val := 0; val < 10; val++ {
                        if (sum+val)%3 == 0 && val != int(cnt[i-1]) && val != int(cnt[i+1]) {
                            cnt[i] = byte(int('0') + val)
                            break
                        }
                    }
                }
                num--
            }
        }
    }
    fmt.Println(string(cnt))
    return
}

```

 类似资料: