zoukankan      html  css  js  c++  java
  • [华为机试练习题]25.圆桌游戏

    题目

    描写叙述:  具体描写叙述:
    
    N个人围坐在一个圆桌上,顺时针报数,报数的初始值为第一个人设置。当有成员报出的数字为7的倍数或数字中包括7,则该人退出圆桌,而后由下一个人開始又一次继续该游戏。
    
    实现下面接口:
    
      1、设定输入原始的圆桌游戏的人数。

    以最先開始报数的人编号为1,顺时针排序。

    2、设定第一个人的初始值。获取依照规则退出圆桌的人的编号。 3、结束游戏。 例子: 比方初始化为4人的游戏:第1轮初始值为1。退出为3;第2轮初始值为4。退出为4号。第三轮初始值为16。退出为2号;第四轮初始值为6。退出为1号。 练习阶段: 中级

    代码

    /*---------------------------------------
    *   日期:2015-06-31
    *   作者:SJF0115
    *   题目:圆桌游戏 
    *   来源:华为机试练习题
    -----------------------------------------*/
    #include <iostream>
    #include <list>
    #include "oj.h"
    using namespace std;
    
    // 玩家数目
    int playerNum = 0;
    // 圆桌
    list<int> circle;
    // 開始玩家
    list<int>::iterator current;
    
    // 功能:设置玩家的个数
    // 输入: unsigned int  nPlayNum   玩家的个数 0 < nPlayNum < 10000;
    // 输出:无
    // 返回:无
    void SetPlayerNum (unsigned int  nPlayNum){
        playerNum = nPlayNum;
        // 初始编号
        for(int i = 0;i < playerNum;++i){
            circle.push_back(i+1);
        }//for
        // 默认開始玩家
        current = circle.begin();
    }
    // 推断是否被踢出局
    bool isOut(int num){
        // 7的倍数
        if(num % 7 == 0){
            return true;
        }//if
        // 包括7
        while(num){
            if(num % 10 == 7){
                return true;
            }//if
            num /= 10;
        }//while
    }
    
    // 功能:依据nInitialNum的值,获取到依据规则下桌的人的编号
    // 输入:unsigned int  nInitialNum  本轮的初始值 0 < nInitialNum < 10000。
    // 输出:无
    // 返回:本轮退出圆桌的人的编号
    unsigned int GetPlayerOut (unsigned int  nInitialNum){
        int n = nInitialNum;
        int index = 0;
        while(playerNum >= 1){
            if(isOut(nInitialNum)){
                --playerNum;
                list<int>::iterator next = ++current;
                if(next == circle.end()){
                    next = circle.begin();
                }//if
                --current;
                int outNum = *current;
                circle.erase(current);
                current = next;
                return outNum; 
            }//if
            ++nInitialNum;
            ++current;
            if(current == circle.end()){
                current = circle.begin();
            }//if
        }//while
        return 0;
    }
    // 功能:游戏结束,释放资源
    // 输入:无
    // 输出:无
    // 返回:无
    void GameOver()
    {
        circle.clear();
        playerNum = 0;
        current = NULL;
    }
  • 相关阅读:
    Go 语言简介(下)— 特性
    Array.length vs Array.prototype.length
    【转】javascript Object使用Array的方法
    【转】大话程序猿眼里的高并发架构
    【转】The magic behind array length property
    【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript
    【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
    【转】大话程序猿眼里的高并发
    php通过token验证表单重复提交
    windows 杀进程软件
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5134283.html
Copyright © 2011-2022 走看看