n个人围成一圈,1—3报数,报到3的退出圈外,如此循环,最后哪个人留下?(用指针解决)

来源:百度知道 编辑:UC知道 时间:2024/06/30 11:13:39
本人刚接触指针,写了一个程序,0error,但是屏幕什么都不显示,不知哪出错,望高人指点。程序写的有些混乱,望见谅!
#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;

20. n个人围成一圈,1,2,3循环报数,报到3的人退出 2:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, 输入n个正整数(代表n个人),围成一圈,按1,2,3报数,报到3的人跳出。问最后一个留在圈中的人是谁 13人围成一圈,报数1,2,3,报3的退出 有n个人围成一圈,顺序排号。 N只猴子围成一圈,从第P个开始,每隔M只报数,打印每次过程,只剩下一个时为大王。 C语言 10人围一圈,开始依次1到8循环报数,每当报8,此人出圈,至圈中剩一人停止,依次写出出圈人原编号 6个人做游戏,从第一个人开始报数,从1开始报,第六个人报完以后又回到第一个人开始报数,请问谁报到3000 C程序有关N个人报数问题? 从第一个人依次从1到N循环报数,当报数为N时,此人出圈,直到一个人为止,按退出的次序输出出圈人编号。