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;
    }
  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5134283.html
Copyright © 2011-2022 走看看