作者在 2011-06-15 13:09:08 发布以下内容
#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[64];
char number[32];
char sex[16];
int age;
char Class[64];
char health[64];
struct student *next;
}node;
typedef struct student jie;
void view(jie *q1)
{
printf("%s ",q1->name);
printf("%s ",q1->number);
printf("%s ",q1->sex);
printf("%d ",q1->age);
printf("%s ",q1->Class);
printf("%s\n",q1->health);
}
jie* creat(int n)
{
jie *head,*q1,*q2;
head=q2=q1=NULL;
int i;
for(i=0;i<n;i++)
{
q1=(jie*)malloc(sizeof(jie));
scanf("%s",q1->name);
scanf("%s",q1->number);
scanf("%s",q1->sex);
scanf("%d",&q1->age);
scanf("%s",q1->Class);
scanf("%s",q1->health);
if(head==NULL)
{
head=q2=q1;
}
else
{
q2->next=q1;
q2=q1;
}
}
q1->next=head;
return head;
}
void yuesefu(jie*p,int n,int m)
{
int j;
int k=0;
jie *q1,*q2;
q1=q2=p;
while(k<n)
{
j=1;
while(j<=m)
{
q1=q2->next;
j++;
if(j==m)
{
q2->next=q1->next;
view(q1);
free(q1);
q1=q2=q2->next;
k++;
break;
}
else
q2=q1;
}
}k++;
if(k==n)
{
view(q1);
free(q1);
}
}
int main()
{
jie *p;
int n,m;
scanf("%d%d",&n,&m);
p=creat(n);
yuesefu(p,n,m);
return 0;
}
#include <stdlib.h>
struct student
{
char name[64];
char number[32];
char sex[16];
int age;
char Class[64];
char health[64];
struct student *next;
}node;
typedef struct student jie;
void view(jie *q1)
{
printf("%s ",q1->name);
printf("%s ",q1->number);
printf("%s ",q1->sex);
printf("%d ",q1->age);
printf("%s ",q1->Class);
printf("%s\n",q1->health);
}
jie* creat(int n)
{
jie *head,*q1,*q2;
head=q2=q1=NULL;
int i;
for(i=0;i<n;i++)
{
q1=(jie*)malloc(sizeof(jie));
scanf("%s",q1->name);
scanf("%s",q1->number);
scanf("%s",q1->sex);
scanf("%d",&q1->age);
scanf("%s",q1->Class);
scanf("%s",q1->health);
if(head==NULL)
{
head=q2=q1;
}
else
{
q2->next=q1;
q2=q1;
}
}
q1->next=head;
return head;
}
void yuesefu(jie*p,int n,int m)
{
int j;
int k=0;
jie *q1,*q2;
q1=q2=p;
while(k<n)
{
j=1;
while(j<=m)
{
q1=q2->next;
j++;
if(j==m)
{
q2->next=q1->next;
view(q1);
free(q1);
q1=q2=q2->next;
k++;
break;
}
else
q2=q1;
}
}k++;
if(k==n)
{
view(q1);
free(q1);
}
}
int main()
{
jie *p;
int n,m;
scanf("%d%d",&n,&m);
p=creat(n);
yuesefu(p,n,m);
return 0;
}
标题: | 约瑟夫环 | |
时 限: | 500 ms | |
内存限制: | 2000 K | |
总时限: | 1000 ms | |
描述: |
约瑟夫环
编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。 | |
输入: |
人数n 报数上限m
人员记录1 (格式为:姓名 学号 性别 年龄 班级 健康状况)
人员记录2
… 人员记录n | |
输出: |
第1次报数出列的人员记录
第2次报数出列的人员记录
… 第n次报数出列的人员记录 | |
输入样例: |
| |
输出样例: | 顾健 10000003 男 27 计29 一般 安弥邵 10000001 女 28 计43 一般 能纸垄 10000005 男 18 计11 健康 宰觅 10000002 男 23 计79 健康 宓顽芳 10000004 女 20 计17 健康 | |
提示: | 循环表 |