编号为1`N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数,可以自由输入),开始人选一个正整数作为报数上限值M,从第一个按顺时针方向自1开始顺序报数,报道M时停止报数。报M的人出列,将他的密码作为新的M值,从他顺时针方向上
的下一个开始从1报数,如此下去,直至所有人全部出列为止。
#include <stdio.h>
#include <malloc.h>
typedef struct Huan
{
int people;
int a;
struct Huan * next;
}H;
H * creat(int n)
{
H *p , *head , *q;
head = (H*)malloc(sizeof(H));
p = head;
int sum , i = 1;
if( 0 != n )
{
while( i <= n )
{
q = (H*)malloc(sizeof(H));
q->people = i ;
printf("请输入第%d个人的密码:", i++ );
scanf("%d", &sum );
q->a = sum ;
p->next = q;
p = q;
}
q->next = head->next;
}
free(head);
return q->next;
}
void show(int n , int m)
{
H *p , *temp;
p = creat(n);
while( p != p->next)
{
for(int i = 1 ; i < m-1 ; i++)
{
p = p->next;
}
printf("第%d个人的密码是%d\n",p->next->people , p->next->a);
temp = p->next;
m = temp->a;
p->next = temp->next;
free(temp);
p = p->next;
}
printf("第%d个人的密码是%d\n",p->people , p->next->a);
}
int main()
{
int n , m;
printf("请输入人的个数:");
scanf("%d", &n);
printf("请输入上限:");
scanf("%d", &m );
show(n , m);
}
<span style="font-size:18px;">#include <stdio.h>
#include <malloc.h>
typedef struct Huan
{
int people;
int a;
struct Huan * next;
}H;
H * creat(int n)
{
H *p , *head , *q;
head = (H*)malloc(sizeof(H));
p = head;
int sum , i = 1;
if( 0 != n )
{
while( i <= n )
{
q = (H*)malloc(sizeof(H));
q->people = i ;
printf("请输入第%d个人的密码:", i++ );
scanf("%d", &sum );
q->a = sum ;
p->next = q;
p = q;
}
q->next = head->next;
}
free(head);
return q->next;
}
void show(int n , int m)
{
H *p , *temp;
p = creat(n);
while( p != p->next)
{
for(int i = 1 ; i < m-1 ; i++)
{
p = p->next;
}
printf("第%d个人的密码是%d\n",p->next->people , p->next->a);
temp = p->next;
m = temp->a;
p->next = temp->next;
free(temp);
p = p->next;
}
printf("第%d个人的密码是%d\n",p->people , p->next->a);
}
int main()
{
int n , m;
printf("请输入人的个数:");
scanf("%d", &n);
printf("请输入上限:");
scanf("%d", &m );
show(n , m);
}