请用go实现以下算法: 0x2-0xd的连续数,0x41和0x42作为万能数(万能数能根据情况变成任意数),0x2可以和0xE进行连续。请用一个函数实现判断输入3个数或者5个数的数组是否连续?
以下是Go语言实现:
package main
import "fmt"
func isContinuous(nums []int) bool {
n := len(nums)
if n != 3 && n != 5 {
return false
}
var wildcard int
for i := 0; i < n; i++ {
if nums[i] == 0x41 || nums[i] == 0x42 {
wildcard++
}
}
if n == 3 {
if wildcard >= 2 {
return true
}
for i := 0; i < n-1; i++ {
if nums[i+1]-nums[i] != 1 {
if wildcard > 0 && nums[i+1]-nums[i] == 2 {
wildcard--
} else {
return false
}
}
}
return true
} else { // n == 5
if wildcard >= 1 {
return true
}
for i := 0; i < n-1; i++ {
if nums[i+1]-nums[i] != 1 {
if wildcard > 0 && nums[i+1]-nums[i] == 2 {
wildcard--
} else if i < n-2 && nums[i+2]-nums[i] == 2 && nums[i+1] == 0x2E {
wildcard--
i++
} else {
return false
}
}
}
return true
}
}
func main() {
nums := []int{0x2, 0x3, 0x4, 0x5, 0x6}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0xD}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0x41}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0x41, 0x43, 0x44}
fmt.Println(isContinuous(nums)) // false
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x6}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x42}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x41}
fmt.Println(isContinuous(nums)) // false
}
函数isContinuous接收一个[]int类型的参数nums,判断其中的数是否连续。如果nums中的数个数不为3或者5,则返回false。如果nums中有两个或两个以上的万能数,则返回true。如果nums中的数连续,则返回true。如果nums中的数不连续,但是可以通过万能数变成连续的数,则将万能数当做需要的数进行替换。如果无法通过万能数变成连续的数,则返回false。
原文地址: https://www.cveoy.top/t/topic/vF2 著作权归作者所有。请勿转载和采集!