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)
}
网友评论