2025-12-08
golang
00

目录

奇偶交替打印一组数据,输入为:[5,6,2,4,1,3] 输出: 561234

相关信息

算法实现-golang实现交替打印数字字母

该题的关键在意通过channel进行控制

  • 声明一个数字ch,一个字母ch
  • 分别启动一个go 协程, 一直读取channel,读取到则进行消费,消费后,写入对方的信号到通道中
go
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup numberChan := make(chan struct{}) letterChan := make(chan struct{}) wg.Add(2) // 打印数字 go func() { defer wg.Done() for i := 1; i <= 26; i++ { <-numberChan fmt.Print(i) letterChan <- struct{}{} } }() // 打印字母 go func() { defer wg.Done() for i := 'A'; i <= 'Z'; i++ { <-letterChan fmt.Print(string(i)) if i != 'Z' { numberChan <- struct{}{} } } }() // 启动 numberChan <- struct{}{} wg.Wait() }

奇偶交替打印一组数据,输入为:[5,6,2,4,1,3] 输出: 561234

js
package main import ( "fmt" "sync" ) func main() { nums := []int{5, 6, 2, 4, 1, 3} // 分离奇偶数据 var odds, evens []int for _, n := range nums { if n%2 != 0 { odds = append(odds, n) } else { evens = append(evens, n) } } // oddTurn 控制奇数打印,evenTurn 控制偶数打印 // 初始时给 oddTurn 一个信号,让奇数协程先开始 oddTurn := make(chan struct{}, 1) evenTurn := make(chan struct{}) var wg sync.WaitGroup wg.Add(2) oddTurn <- struct{}{} // 启动:先由奇数协程运行 // 奇数协程 go func() { defer wg.Done() for _, n := range odds { <-oddTurn // 等待信号 fmt.Print(n) evenTurn <- struct{}{} // 通知偶数协程 } }() // 偶数协程 go func() { defer wg.Done() for _, n := range evens { <-evenTurn // 等待信号 fmt.Print(n) oddTurn <- struct{}{} // 通知奇数协程 } }() wg.Wait() fmt.Println() // 换行 }

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!