早教吧作业答案频道 -->其他-->
有N个人围成一圈,顺序排号。从第一个开始报数,(从1到3报数),凡报道3的人退出圈子,问最后留下的是原来第几号那位
题目详情
有N个人围成一圈,顺序排号。从第一个开始报数,(从1到3报数),凡报道3的人退出圈子,问最后留下的是原来第几号那位
▼优质解答
答案和解析
#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 }
/*下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列*/
void outline(int *h,int boy,int call)
{
int *p, chu, callnum;
/*说明:
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
/*下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列*/
void outline(int *h,int boy,int call)
{
int *p, chu, callnum;
/*说明:
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);/*在函数中,已经把最后一个人的编号写入了数组首地址处,
这里输出就可以了*/
}
看了有N个人围成一圈,顺序排号。从...的网友还看了以下:
有五排棋子排五排每排的顺序是第一排3个第二排4个第三排5第四排6第五排7个每次拿只能在一排当中拿不 2020-06-11 …
有15颗棋子,第一排摆一颗,第二排摆二颗,如此放到第五排,形成一个等边三角形.两人轮流拿旗子,每次 2020-06-11 …
有15颗棋子,第一排放第一颗,第二排放第二颗,如此放到第五排,形成一个等边三角形.两个人轮流拿棋子 2020-06-11 …
若将连续的自然数1到140按第一排1到7,8到14,第3排15到21,第4排22到28第5排29到 2020-06-11 …
1到36依次排列,第一排1个数,第二排3个数,第三排5个数,第四排7个数,第五排9个数,第六排11 2020-06-11 …
一套五卷百科全书按递增顺序摆放在书架上,即从左到右由第1卷依次排到第5卷.现想把它们改换成按递减顺 2020-06-22 …
给出1,2,3,4,5五个数字,排列这五个数字,要求第一个到第i个位置(i是1到4的整数)不能有1 2020-07-19 …
6人站成2排,且每排都从低到高排列(假设6个人身高都不相同)则有几种排列方式?答案C(6,3)含义 2020-07-25 …
在25个方格里填写1到24,第一排倒数第2个不能填,按顺序填写(可左、可右、可上、可下),不能跳格、 2020-11-02 …
原来在第三组第二排坐,后来从第三组第二排调到第四组第二排,一个月后,由于和主动把第二排位置让给视力不 2020-11-24 …