n个人围成一圈,1—3报数,报到3的退出圈外,如此循环,最后哪个人留下?(用指针解决)
来源:百度知道 编辑:UC知道 时间:2024/06/30 11:13:39
#include<iostream>
using namespace std;
int main()
{int *p,*m,*i;
int n=20;
int yuan[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
p=&yuan[0];
i=&n;
void select(int *,int *);
while(*i>=3)
{select(p,i);}
m=p+*i-1;
for(;p<=m;p++)
cout<<*p;
return 0;}
void select(int *c,int *x)
{int shuzu[20];
int *q,z,*q2;
q=&shuzu[0];
q2=q;
for(z=0;z<*x;z++)
{if(z%3==0) continue;
*q=*(c+z);
q++;
}
*x=q-q2+1;
c=q2;}
C的看不懂,没学过,只能看懂标准C++的
你这里有明显的死循环。
你把i地址给了select(),但是你在select()当中从来就没有改变过i的值,那就是说无论执行多少次,你的i始终都是20,那你就一直在while()里面转了啊。
//数组和指针其实是一样的。。 a[10] 这个数组 其实a就是指针。
// 给你标准C++的答案 直接复制运行就可以了。
//
//
/*----------------------------------------------*/
/*n个人围成一圈,数到3的人退出,最后剩下的人编号为*/
/*----------------------------------------------*/
#include<iostream.h>
void leave(int n) //n个人围成一圈,数到3的人退出,最后剩下的人编号为
{
int k=1; //计数值
int i=1;
int temp=n;
int a[100];
for(;i<=n;i++)
a[i]=i; //给每个人编号
while(n>1)
{
for(i=1;i<=temp;i++)
{
if(k==3&&a[i]!=0) {a[i]=0; k=1; n--;/*cout<<n<<endl*/;}
else
{
if(a[i]!=0) k++;
}
}
}
for(i=1;i<=temp;i++)
{
if(a[i]!=0)
{
cout<<temp<<"个人围成一圈,数到3的人退出,最后剩下的人编号为:"<<a[i]<<endl;
break;