1573: Math two
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 71 Solved: 27
[ Submit][ Status][ Web Board]
Description
有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。
Input
第一行输入小孩的人数N(N<=64)
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号","间隔
Output
按人名输出小孩按顺序出列的顺序,每行输出一个人名
Sample Input
5 Xiaoming Xiaohua Xiaowang Zhangsan Lisi 2,3
Sample Output
Zhangsan Xiaohua Xiaoming Xiaowang Lisi
HINT
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
int num;
char name[50];
node *next;
};
void print(node *l )
{
//l = l->next;
while(l)
{
printf("%s\n", l->name);
l = l->next;
}
}
int main( )
{
int N, w, n, i, j;
struct node *head, *p, *q, *l;
while (scanf("%d",&N) != EOF )
{
head = p = new node;
head->next = NULL;
p->next = NULL;
if ( N )
scanf("%s",p->name); //刚开始头节点为空。循环时出错
for (i = 0; i < N -1; i++) {
l = new node;
scanf("%s",l->name);
l ->next = NULL;
p ->next = l;
p = l;
}
p->next = head;
scanf("%d,%d",&w, &n); //此处改错误改了好久
p = head;
for(i = 0; i < w-1; i++)
q = p, p = p->next;
// printf("2q:%s %s\n",q->name, p->name);
j = 0;
while( p->next != p )
{
for (i = 0; i < n-1 ; i++) {
q = p, p = p->next;
}
printf("%s\n",p->name);
free(p);
q->next = p->next;
p = q->next;
}
printf("%s\n",p->name);
free(p);
}
return 0;
}