41. Go 언어 · 데이터 구 조 · 링 단 방향 링크 · 조세 프 문제 [손수건 잃 어 버 리 기 문제]

2389 단어
main.go
//    ————      
package main

import (
    "fmt"
)

type Boy struct {
    No int
    Next *Boy  //   nil
}


//       ,         
// num:       
// *Boy:               
func Join(num int) *Boy {
    first    := &Boy{}
    currtBoy := &Boy{}

    if num<1 {
        fmt.Println("    ~~~")
        return first
    }

    for i := 1; i <=num; i++ {
        boy := &Boy{
            No:i,
        }
        //       ,        [   ]
        if i == 1 {
            first  = boy
            currtBoy = boy
            currtBoy.Next = first
        }else{
            currtBoy.Next = boy
            currtBoy = boy
            currtBoy.Next = first
        }
    }
    return first
}

//   
func Show (first *Boy) {
    fmt.Println()
    if first.Next == nil {
        return 
    }
    currBoy := first
    for {
        fmt.Printf("[No.%d]-->",currBoy.No)
        if currBoy.Next == first {
            fmt.Printf("[No.%d]",first.No)
            break
        }
        currBoy = currBoy.Next
    }
    fmt.Println()
}


/*
        1,2,3,...,n n      ,     k(1<=k<=n)
   1    ,  m      ,       1    ,
  m       ,    ,         ,           
  
 */
func PlayGame(first *Boy ,startNo int,countNum int) {

    if first.Next == nil {
        fmt.Println("   ~~~")
        return 
    }

    //        ,          
    //tail        
    tail := first
    for {
        if tail.Next == first{
            break
        }
        tail = tail.Next
    }


    fmt.Println()
    // 4.     k(1<=k<=n)
    //  first    startNo,      n
    //   ,         k(startNo)     
    for i := 1; i <=startNo-1; i++ {
        first = first.Next
        tail  = tail .Next
    }

    
    // 5. 1    ,  m      ,
    //        1    ,  m       
    //  1    ,  m[countNum]
    for {
        //  1    ,  countNum-1
        for i := 1; i <=countNum-1; i++ {
            first = first.Next
            tail  = tail .Next
        }


        fmt.Printf("[No.%d    !] 
",first.No) first = first.Next tail.Next = first if tail == first { break } } fmt.Printf("[No.%d !]
",first.No) } func main() { // 1. 1,2,3,...,n n first := Join(5) // 2. 。 Show(first) // 3. PlayGame(first,2,3) }

좋은 웹페이지 즐겨찾기