zoukankan      html  css  js  c++  java
  • Go语言(Golang)约瑟夫游戏(Joseph)

    package main
    
    import (
    	"fmt"
    )
    
    //假设是一群小孩在玩这个游戏
    //创建一个小孩的结构体
    type BoyNode struct {
    	No int //给每个小孩一个唯一的身份编号
    	next *BoyNode //指向下一个小孩
    }
    
    //假设有number个小孩在玩游戏
    func AddBoyNode(number int)  *BoyNode {
    	head := &BoyNode {} //先创建一个头节点
    	temp := &BoyNode {} //创建一个辅助节点
    	for i := 1; i<= number; i++ {
    		boy := &BoyNode {
    			No : i,
    		}
    		if i == 1 {
    			head = boy
    			temp = boy
    			temp.next = head
    		} else {
    			temp.next = boy
    			temp.next.next = head
    		}
    		temp = temp.next
    	}
    	return head
    }
    
    //开始游戏
    func Play(head *BoyNode, a, b int) *BoyNode {
    	temp := head   //辅助节点指向头节点head
    	helper := head	//辅助节点指向链表最后的节点
    	//判断如果没有小孩无法游戏
    	if temp.next == nil {
    		fmt.Println("没有小孩,无法进行游戏!")
    		return head
    	}
    	//小孩只剩一个的时候退出游戏
    	if temp.next == head {
    		fmt.Println("只有一个小孩了,游戏结束!最后一个小孩为:")
    		return head
    	}
    	//将helper指向最后一个小孩
    	for {
    		if helper.next == head {
    			break
    		}
    		helper = helper.next
    	}
    	//循环找到从第a个小孩开始游戏
    	for {
    		if temp.No == a {
    			break
    		}
    		temp = temp.next
    		helper = helper.next
    	}
    	//数到b时出列的小孩
    	for i := 1; i < b; i++ {
    		temp = temp.next
    		helper = helper.next
    	}
    	//如果该小孩是第一个小孩,则将头节点指向下一个小孩
    	if temp == head {
    		head = head.next
    	}
    	helper.next = temp.next
    
    	fmt.Println()
    	fmt.Printf("小男孩:%d出列!",temp.No)
    	fmt.Println()
    	ListBoyNode(head)
    	//下一次游戏从第a个小孩开始
    	a = temp.next.No
    	return Play(head,a,b)
    }
    
    //输出显示链表
    func ListBoyNode(head *BoyNode) {
    	temp := head
    	for {
    		fmt.Printf("小男孩:%d ==>",temp.No)
    		temp = temp.next
    		if temp == head {
    			break
    		}
    	}
    }
    
    
    func main() {
    	fmt.Println("请输入有多少个小孩玩游戏:")
    	var number int
    	fmt.Scan(&number)
    	head := AddBoyNode(number)
    	ListBoyNode(head)
    	fmt.Println("请输入从第几个小孩开始游戏:")
    	var a int 
    	fmt.Scan(&a)
    	fmt.Println("请输入数几的小男孩出列:")
    	var b int 
    	fmt.Scan(&b)
    	head = Play(head,a,b)
    	ListBoyNode(head)
    }
    

      

  • 相关阅读:
    python 获取项目的根路径
    信息系统项目管理师-1.4软件工程
    信息系统项目管理师
    信息系统项目管理师-导学
    信息系统项目管理师-考试安排
    读取text行列
    pipeline基本框架思维
    Linux压缩隐藏文件
    python+appium环境搭建
    leetcode for mysql
  • 原文地址:https://www.cnblogs.com/HouZhenglan/p/10083697.html
Copyright © 2011-2022 走看看