4.c语言编有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出(m>n)(

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.c语言编有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出(m>n)(相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

#define MAX 100
main()

int a[MAX];
int m,n;
int i,k,length;
printf("请输入n和m(n>m),中间以空格结束!\n当只剩余一个人时候,自动结束,例如输入 2 1;不会把2个人都删除了.\n当删除了第一个人之后,则先结束程序,于是输出2\n");
scanf("%d%d",&n,&m);
if(n>=MAX||n<m||n<1||m<1)

printf("您的输入不符合要求!\n");
return;


for(i=1;i<=n;i++)//开始赋值 初始化

a[i]=i;

length=n;//初始化
i=1;
k=1;
while(1)


if(a[i]>0)

if(length==1)

break;

if(k>=m)

a[i]=0;
k=1;
length--;

else//k<m

k++;



i++;
i=i>n?1:i;


printf("最后剩余的下标为%d\n",i);

参考技术A #include <stdio.h>
typedef struct node
int data;
struct node *next;Lnode;
Lnode *create(int n)
int i;
Lnode *h,*p,*r=(Lnode*)malloc(sizeof(Lnode);
r->data=n;h=r;
for(i=n-1;i>0;i--)
p=(Lnode *)malloc(sizeof(Lnode));
p->data=i;
h=p;
r->next=h;
return h;


void jeseph(Lnode *p,int m)
Lnode *q; int j=0;
printf("outqueue order:");
do
j++;
if (j==m-1)
q=p->next;
p->next=q->next;
printf("%d",q->data);
j=0;free(q);
while(p->next!=p);
printf(“%d\n",p->data);
free(p);

void main()
Lnode *h ;
int m,n;
printf ("\n input n,m=");
scanf("%d,%d",&n,&m);
h=create(n);
jeseph(h,m);
本回答被提问者采纳
参考技术B #include <stdio.h>
#include <stdlib.h>

typedef struct Node

int data;
struct Node* next;
LNode, *LinkList;

LinkList list = NULL;
int n; //人数
int m; //报数号

//n为总人数,k为第一个开始报数的人,m为出列者喊到的数
void JosephRing(int n, int k, int m)

LinkList p, r; /* p为当前结点,r为辅助结点,指向p的前驱结点*/

for(int i = 1; i <= n; i++) /*建立循环链表*/

p = (LinkList)malloc(sizeof(LNode));
p->data = i;
if(list == NULL) list = p;
else r->next = p;
r = p;

p->next = list; /*使链表循环起来*/
p = list; /*使p指向头节点*/

/*把当前指针移动到第一个报数的人*/
for(i = 1; i < k; i++)

r = p;
p = p->next;

printf("%d", p->data);

/*循环地删除队列结点*/
while(p->next != p)

for(i = 1; i < m; i++)

r = p;
p = p->next;

r->next=p->next;
printf("%4d ",p->data);
free(p);
p=r->next;

printf("%4d",p->data);


void main()

printf("input m=");
scanf("%d", &m);
scanf("%d", &n);
JosephRing(n, 1, m);

C语言试题142之有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出 圈子,问最后留下的是原来第几号的那位。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家

以上是关于4.c语言编有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出(m>n)(的主要内容,如果未能解决你的问题,请参考以下文章

C语言 n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,计算最后留下的是最初第几号人

C语言 n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,计算最后留下的是最初第几号人

C语言试题142之有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出 圈子,问最后留下的是原来第几号的那位。

C语言 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的人是原来的第几号?

c语言,有n个人围成一个圈,顺序排号,从第一个开始报数(1到3),凡报到3的退出圈子问最后留下的人

有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位