美文网首页
go面试(编程题)

go面试(编程题)

作者: 小王同学123321 | 来源:发表于2022-05-12 14:52 被阅读0次

1,写一个函数判断一个字符串是否是回文,要求不借助额外临时变量

package main

import "fmt"

//将str转换为rune目的是为了可以检查中文
func Checkis_huiwen(str string) bool{
    if len(str) == 0{
        return false
    }
    runestr := []rune(str)
    i,j := 0,len(runestr)
    for i < j{

        if runestr[i] != runestr[j]{
            return false
        }else{
            i++
            j--
        }
    }
    return true
}

func main(){
    fmt.Println(Checkis_huiwen("nihaooahin"))
}

2,编程实现:使用2个协程交替执行,使其能顺序输出1-20的自然数,一个子协程输出奇数,另一个输出偶数

package main

import (
    "fmt"
    "sync"
)


//输出偶数,存奇数
func Echoodd(wg *sync.WaitGroup,chanodd chan int ,chaneve chan int){
    defer wg.Done()
    for i:=1;i<=10;i++{
        chaneve <- 2*i-i
        fmt.Printf("Echoodd fun Print:%d\n",<-chanodd)
    }
}

func Echoeve(wg *sync.WaitGroup,chaneve chan int ,chanodd chan int){
    defer wg.Done()
    for i:=1;i<=10;i++{
        chanodd <- 2*i
        fmt.Printf("Echoeve fun Print:%d\n",<-chaneve)
    }
}

func main(){
    wg := &sync.WaitGroup{}
    chanodd := make(chan int)
    chaneve := make(chan int)

    wg.Add(2)
    go Echoeve(wg,chanodd,chaneve)
    go Echoodd(wg,chaneve,chanodd)

    wg.Wait()
}

如果a+b+c=1000,且aa+bb=c*c(a,b,c为自然数)
如何求出所有a,b,c可能的组合?不适用数学公式和math包
代码实现,尽可能保证算法高效

package main

import (
    "fmt"
    "time"
)

func Calsum1(){
    for i:=0;i<1001;i++{
        for j:=0;j<1001;j++{
            for k :=0;k<1001;k++{
                if i+j+k == 1000 && k*k==i*i+j*j{
                    fmt.Printf("%d,%d,%d\n",i,j,k)
                }
            }
        }
    }
}

func Calsum2(){
    for i:=0;i<1001;i++{
        for j:=0;j<1001;j++{
            k := 1000-i-j
            if  k*k==i*i+j*j{
                fmt.Printf("%d,%d,%d\n",i,j,k)
            }
        }
    }
}

func Calsum3(){
    for i:=0;i<1001;i++{
        for j:=0;j<1001-i;j++{
            k := 1000-i-j
            if  k*k==i*i+j*j{
                fmt.Printf("%d,%d,%d\n",i,j,k)
            }
        }
    }
}

func main(){
    //第一种算法,消耗时间:456149800ns
    start_time:=time.Now().Nanosecond()
    Calsum1()
    end_time:=time.Now().Nanosecond()
    fmt.Println("Calsum1消耗时间:%dns",end_time-start_time)

    //第二种算法,消耗时间:1957900ns
    start_time1:=time.Now().Nanosecond()
    Calsum2()
    end_time1:=time.Now().Nanosecond()
    fmt.Println("Calsum2消耗时间:%dns",end_time1-start_time1)

    //第三种算法,消耗时间1101600ns
    start_time2:=time.Now().Nanosecond()
    Calsum3()
    end_time2:=time.Now().Nanosecond()
    fmt.Println("Calsum3消耗时间:%dns",end_time2-start_time2)
}

相关文章

网友评论

      本文标题:go面试(编程题)

      本文链接:https://www.haomeiwen.com/subject/ttosurtx.html