[华为机试练习题]25.圆桌游戏

来源:互联网 发布:淘宝女式薄绒内衣套装 编辑:程序博客网 时间:2024/05/16 16:15

题目

描述:  详细描述: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;}
0 0
原创粉丝点击