原文地址:Go面试编程题目(三)
1、约瑟夫环问题?
题目描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 k 的 士兵会被杀掉出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。
实现代码如下:
package main
import "fmt"
//n个人,每数到k就出圈
func josephus(n int, k int) int {
if n == 1 {
return n
}
return (josephus(n-1, k)+k-1)%n + 1
}
func main() {
n := 5
k := 2
res := josephus(n, k)
fmt.Println(res)
}
打印结果如下:
2、给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数?
实现代码如下:
package main
import "fmt"
func countUnicode(s string) {
var letter int //字母个数
var num int //数字个数
var space int //空格个数
var other int //其他个数
for i := 0; i < len(s); i++ {
if (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') {
letter++
} else if s[i] >= '0' && s[i] <= '9' {
num++
} else if s[i] == ' ' {
space++
} else {
other++
}
}
fmt.Printf("字母的个数为%d\n", letter)
fmt.Printf("数字的个数为%d\n", num)
fmt.Printf("空格的个数为%d\n", space)
fmt.Printf("其他字符的个数为%d\n", other)
}
func main() {
s := "A, B, 44...,5 Z、a, b, ..., &&z "
countUnicode(s)
}
打印结果如下:
3、编写一个函数就地反转一个整型slice中的元素。
实现代码如下:
package main
import "fmt"
//就地反转一个整型slice中的元素
func reverse(s []int) []int {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}
func main() {
var s []int = []int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(reverse(s))
}
打印结果如下:
4、判断两个slice是否拥有相同的元素?
实现代码如下:
package main
import "fmt"
func equal(x, y []string) bool {
if len(x) != len(y) {
return false
}
for i := range x {
if x[i] != y[i] {
return false
}
}
return true
}
func main() {
x := []string{"a", "b", "c", "d"}
y := []string{"a", "d", "p", "d"}
z := []string{"a", "b", "c", "d"}
fmt.Println(equal(x, z))
fmt.Println(equal(y, z))
}
打印结果如下:
5、翻转二维数组?
实现代码如下:
package main
import "fmt"
func transpose(a [][]int) [][]int {
//只有一行则不是二维数组
if len(a[0]) == 0 {
return nil
}
row := len(a[0]) //arr的row
col := len(a) //arr的col
arr := make([][]int, row, row)
for i := 0; i <= row-1; i++ {
arr[i] = make([]int, col)
}
for k := col - 1; k >= 0; k-- {
for y := row - 1; y >= 0; y-- {
arr[y][k] = a[k][y]
}
}
fmt.Println(arr)
return arr
}
func main() {
a := [][]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
}
transpose(a)
}
打印结果如下:
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。