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的人退出圈子,问最后留下的人是原来的第几号?