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;
    }
  • 相关阅读:
    jenkins--部署项目
    jenkins--创建项目
    jenkins--安全配置
    jenkins--工具配置
    jenkins--系统配置
    11.17
    11.14
    11.13
    dfs
    10.31
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5134283.html
Copyright © 2011-2022 走看看