[华为机试练习题]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;
}
目录
相关文章
|
8天前
|
存储 人工智能 测试技术
2020年第十一届蓝桥杯模拟赛解题报告
2020年第十一届蓝桥杯模拟赛解题报告
|
9月前
三道华为机试题
三道华为机试题
34 0
|
存储 算法 搜索推荐
【迎战蓝桥】 算法·每日一题(详解+多解)-- day8
💖1. 连续子数组的最大和 💖2. 回文数索引 💖3. 把数组排成最小的数
【迎战蓝桥】 算法·每日一题(详解+多解)-- day8
|
机器学习/深度学习 物联网 C++
【LGR-(-17)】洛谷入门赛 #8个人思考
某 E 在 2022 年的幸运数字是 x xx,这个数可能是正的,也可能是负的。 某 E 想要知道 x   m o d   2023 x \bmod 2023xmod2023 的值。其中,  m o d   \bmodmod 是取模操作。也就是说,你需要求出 x xx 除以 2023 20232023 的余数,这个余数必须是非负整数。 例如,2022   m o d   2023 = 2022 2022 \bmod 2023 = 20222022mod2023=2022,2025   m o d   2023 = 2 2025 \bmod 2023 = 22025mod2023=2,− 2
278 0
|
人工智能 测试技术
2021年第十二届蓝桥杯模拟赛(第三期)题目和解析
蓝桥杯是指蓝桥杯全国软件和信息技术专业人才大赛。是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛。
327 0
2021年第十二届蓝桥杯模拟赛(第三期)题目和解析
|
测试技术
2021年第十二届蓝桥杯模拟赛(第四期)题目和解析
蓝桥杯是指蓝桥杯全国软件和信息技术专业人才大赛。是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛。
157 0
2021年第十二届蓝桥杯模拟赛(第四期)题目和解析
牛客小白月赛37 G.零一奇迹(思维 枚举)
牛客小白月赛37 G.零一奇迹(思维 枚举)
113 0
牛客小白月赛37 G.零一奇迹(思维 枚举)
|
人工智能 算法 新能源
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day10
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day10
93 0
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day10
|
人工智能 算法 新能源
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day9
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day9
96 0
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day9
|
机器学习/深度学习 人工智能 算法
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day5
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day5
84 0