c++编程问题,请高手指教

来源:百度知道 编辑:UC知道 时间:2024/05/15 03:40:56
//有N(要求输入,但小于30)个小孩围成一个圈,编号为1,2,3……N,
//从第一个小孩开始数起,数到3的小孩被淘汰,后面的继续从一数,数
//到三的淘汰,以此类推,问最后剩下的那个小孩的号码??
int num(int n)
{
int *f=new int(n);
int count=0;
int rest=n;
for(int k=0;k<n;k++)
f[k]=0;
for(;rest>1;)
{
for(int i=0;i<n;i++)
{
if(f[i]==0)
count++;
if(count==3){
count=0;
f[i]=1;
rest--;
}
}
}
for(int j=0;j<n;j++){
if(f[j]==0)
return j+1;
}
return -1;
}

void main(){
int n=8;
cout<<num(n)<<endl;
}
当我设定n等于6以上时,程序就出错了 我不知道怎么回事,请高手指教
6以下没有问题
jjh_5051,我的程序rest是设定为大于1,当rest=2时可以循环记数,不存在不能被3整除的问题,
题目要求的也是最后一个,不是最后两个!
我想是不是动态分配空间部分错了,请高手指点啊!

我怎么觉得是对的。

int num(int n)
{
int *f=new int(n);
int count=0;
int rest=n;
for(int k=0;k<n;k++)
f[k]=0;
for(;rest>1;) /*这里要设rest>2因为只有2个的时候结束不了循环*/
{
for(int i=0;i<n;i++)
{
if(f[i]==0)
count++;
if(count==3){
count=0;
f[i]=1;
rest--;
}
}
}
for(int j=0;j<n;j++){
if(f[j]==0)
return j+1;
}
return -1; /*当n为0时返回-1,其余情况下为第一个不是3 的序号.因为n为1时,2 时不能被3整除.所以上面的rest 应该设为>2
}

void main(){
int n=8;
cout<<num(n)<<endl;
}