///////////////////////////////////////////////////////////////////
///@brief 功能说明:以C++方式实现程序: 设有N个人围坐一圈并按顺时针方向从
// 1到N编号,从第S个人开始进行1到M报数,报数到第M个人时,此
// 人出圈,再从他的下一个人重新开始1到M的报数,如此进行下去
// 直到所有的人都出圈为止。打印出出圈次序。
///@date 2011/5/4 —— 2011/5/28
///@note 备注:
///////////////////////////////////////////////////////////////////
#include <iostream>
#include <malloc.h>
using namespace std;
///@brief 函数名: mainface()
///@brief 函数功能:系统主界面函数
///@date 2011/5/17
///@param [IN]
///@retval
///@return
///@note 备注:
void mainface()
{
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << " ********************************************************";
cout << endl;
cout << " WELCOME TO THE CODE ZOON OF CIRCLECOUNT ";
cout << endl;
cout << " 欢迎来到代码园地——报数出圈 ";
cout << endl;
printf( " ********************************************************");
cout << endl;
cout << endl;
cout << endl;
}
///@brief 函数名: mainmenu()
///@brief 函数功能:分级界面函数
///@date 2011/5/19
///@param [IN]
///@retval
///@return
///@note 备注:
void mainmenu()
{
system("cls"); //调用清屏函数
cout << endl;
cout << endl;
cout << "******************************************************\n";
cout << " ************************************************ \n";
cout << endl;
cout << " 请输入以下数值(均为正整数) : \n";
cout << endl;
cout << " N 表示总人数 \n";
cout << " S 表示从第S个人开始报数 \n";
cout << " M 表示进行1到M报数 \n";
cout << endl;
cout << " ************************************************ \n";
cout << "******************************************************\n";
}
///@brief 函数名: PrintOutIndex()
///@brief 函数功能:打印计算出圈顺序函数
///@date 2011/5/24
///@param [IN]
///@retval
///@return
///@note 备注:
void PrintOutIndex ( int iTotalNum, int iStartPos, int iCountNum )//声明三个参数:总人数、开始报数位置、报数值
{
int *a = new int[iTotalNum+1], iIndex, iRemainNum, iOutIndex;//声明各参数
--iStartPos;
for ( iIndex = 0; iIndex < iTotalNum; ++iIndex )
{
a[iIndex] = iIndex + 1;
}
iRemainNum = iTotalNum; //剩余人数
while ( iRemainNum > 0 ) //当圈中还有人时
{
iOutIndex = ( iStartPos+iCountNum-1 ) % iRemainNum; //出圈编号
iStartPos = iOutIndex; //打印出圈编号
cout << a[iOutIndex] << " ";
--iRemainNum; //剩余人数减1
for ( iIndex = iOutIndex; iIndex < iRemainNum; ++ iIndex )
{
a[iIndex] = a[iIndex+1];
}
}
cout << endl;
}