滴滴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
}```

