有N个人围成一圈,顺序排号。从第一个开始报数,(从1到3报数),凡报道3的人退出圈子,问最后留下的
答案:6 悬赏:0 手机版
解决时间 2021-04-13 20:05
- 提问者网友:人生佛魔见
- 2021-04-13 01:56
有N个人围成一圈,顺序排号。从第一个开始报数,(从1到3报数),凡报道3的人退出圈子,问最后留下的
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-04-13 03:09
#include
#define n 100
void main()
{int a[n],i,quit_num,k;
for(i=0;i a[i]=i+1;
quit_num=0;
i=0;
k=0;
while(quit_num {if(a[i]!=0)k++;
if(k==3)
{a[i]=0;
quit_num++;
k=0;
}
i++;
if(i==n)i=0;
}
for(i=0;i if(a[i]!=0)printf("%d",a[i]);
}
能看懂吗?
再送点详解给你
#include
#define N 50 // 排队人数(可任意更改)
#define CAL 3 //凡报3的人出列(可任意更改)
//下面是排队编号函数:从h 开始的n个人依次编号1到n
void stdline(int *h,int n)
{
int i;
for(i=1;i }
void outline(int *h,int boy,int call)
{
int *p, chu, callnum;
chu=0;
callnum=0;//各计数器清零
p=h; //开始时,工作指针指向数组首
printf("出列顺序是:\n");
while(chu {
if(*p!=0) callnum++; //每次加报数
if(callnum==call) //如果某一个人报到出列数call...
{
printf("%5d",*p); //打印编号,表示出列
chu++; //出列人数加1
if(chu==boy)//如果全部出列....
{
*h=*p; //把最后一个出列人的编号记入地址开始处
return; //结束
}
if(chu%10==0)printf("\n");//每输出10个换行
callnum=0; //出列后,重新报数
*p=0; //出列后,将其编号赋零,以示区别
}
p++; //工作指针移向下一个人,即下一个数组元素
if(p>h+boy-1)p=h;
}
}
void main()
{
int a[N]; //用数组模拟队列,每个元素代表一个人
stdline(a,N);//编号
outline(a,N,CAL);//计算并打印出列顺序
printf("\n最后留下来的是 %d 号\n",*a);
}
#define n 100
void main()
{int a[n],i,quit_num,k;
for(i=0;i
quit_num=0;
i=0;
k=0;
while(quit_num
if(k==3)
{a[i]=0;
quit_num++;
k=0;
}
i++;
if(i==n)i=0;
}
for(i=0;i
}
能看懂吗?
再送点详解给你
#include
#define N 50 // 排队人数(可任意更改)
#define CAL 3 //凡报3的人出列(可任意更改)
//下面是排队编号函数:从h 开始的n个人依次编号1到n
void stdline(int *h,int n)
{
int i;
for(i=1;i
void outline(int *h,int boy,int call)
{
int *p, chu, callnum;
chu=0;
callnum=0;//各计数器清零
p=h; //开始时,工作指针指向数组首
printf("出列顺序是:\n");
while(chu
if(*p!=0) callnum++; //每次加报数
if(callnum==call) //如果某一个人报到出列数call...
{
printf("%5d",*p); //打印编号,表示出列
chu++; //出列人数加1
if(chu==boy)//如果全部出列....
{
*h=*p; //把最后一个出列人的编号记入地址开始处
return; //结束
}
if(chu%10==0)printf("\n");//每输出10个换行
callnum=0; //出列后,重新报数
*p=0; //出列后,将其编号赋零,以示区别
}
p++; //工作指针移向下一个人,即下一个数组元素
if(p>h+boy-1)p=h;
}
}
void main()
{
int a[N]; //用数组模拟队列,每个元素代表一个人
stdline(a,N);//编号
outline(a,N,CAL);//计算并打印出列顺序
printf("\n最后留下来的是 %d 号\n",*a);
}
全部回答
- 1楼网友:逃夭
- 2021-04-13 07:38
看N/3的余数。可能是1个人,或2个人
- 2楼网友:独行浪子会拥风
- 2021-04-13 07:10
1、(1n+2n+3n)-3n=(1n+2n)
2、(1n+2n)-3(第二次的3其实就是1)=2n
3、剩下的人为:总n人数里面的。最中间的2n那位
2、(1n+2n)-3(第二次的3其实就是1)=2n
3、剩下的人为:总n人数里面的。最中间的2n那位
- 3楼网友:不想翻身的咸鱼
- 2021-04-13 06:07
是2个人吗?
- 4楼网友:旧脸谱
- 2021-04-13 05:20
问N是几吗?2吧。只要喊道3就退出了,也就不能喊到3,所以是2
- 5楼网友:掌灯师
- 2021-04-13 04:30
1、2只剩下它俩
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯