nds火影忍者下载:那位帮帮忙 用指针做出这道题啊~~~

来源:百度文库 编辑:高校问答 时间:2024/05/11 01:43:07
有几个人围成一圈,顺序排号,从第一个开始报数,(从1到3报数),凡报到了的人退出圈子,最后留下的是几号?
用指针做出来,或者指针以前的内容。
最后一句是“凡报到“3”的人退出圈子,最后留下的是几号???

#define PERSON_NUM 10
#include "iostream.h"

/* 号码输入必须是非-1的整数,改变数组内容的同时要改变PERSON_NUM的值 */
int ArrNum[PERSON_NUM] = {1,2,3,4,5,6,7,8,9,10};

void main(void)
{
int iTmp = 0; //用于存储取到号码的缓冲区
int iCount = 1; //计数器,1,2,3循环报数
int iTmpCount = 0; //计数器,计算已经取到了几个号码

for (int i = 0; iTmpCount != 10; i++) {

/* 如果报数到了第11个,就转到第1个 */
if (i == PERSON_NUM)
i = 0;

/* 取出号码,取出后的空间置为-1 */
if (ArrNum[i] == -1)
continue;
else {
if (iCount == 3) {
iCount = 1;
iTmp = ArrNum[i];
ArrNum[i] = -1;
iTmpCount++;
}
else {
iCount++;
}
}
}

cout<<"最后一个人是"<<iTmp<<"号"<<endl;
}

#define STEP 3
//param nCount: 人数
//return 最后剩下的号码 1 ~ nCount
int GetLeft( int nCount )
{
char *p = new char[ nCount ];
int nLeft = nCount;
int nIndex = 0;
int nStep = 1;
for( int i = 0; i < nCount; i++ )
p[ i ] = 1;
while( nLeft > 1 )
{
while( !p[ nIndex ] )
{
nIndex++;
if( nIndex > nCount - 1 )
nIndex = 0;
}
if( !( nStep %= STEP ) )
{
p[ nIndex ] = 0;
nLeft--;
}
nIndex++;
if( nIndex > nCount - 1 )
nIndex = 0;
nStep++;
}
nIndex = 0;
while( !p[ nIndex++ ] )
NULL;
delete []p;
return nIndex;
}