美文网首页
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