その日の1文、最も貴重なあなたへ:さまざまな環境に適応することを学び、環境とともに変化するかどうかによって、どのような生活を始めるかが決まります。
タイトルは
、最初に数えた人から始めて、mまで数えた人がリストされ、次の人が再び1から数え始め、mまで数えた人が円から外れる、というように、円内のn人を表します。すべての人がサークルから外れるまで、サークルから外れた人の数を順番に出力してください。
入力フォーマット
2つの整数n、mを入力します。
出力形式
n個の整数の行を出力し、円内の各人の数を順番に出力します。
入力および出力サンプル
入力
103
出力
3 6 9 2 7 1 8 5 10 4
ソースコード:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
}ListNode;
typedef ListNode *LinkList;
LinkList InitList (int n,LinkList L);
LinkList ListDelete(int n,int m,LinkList L);
int main() {
LinkList L;
int n,m;
scanf("%d %d",&n, &m);
L=InitList(n,L);
L=ListDelete(n,m,L);
//return 0;
}
LinkList InitList (int n,LinkList L) {
ListNode *p, *q;
int i;
L = (ListNode *) malloc(sizeof(ListNode));
q=L;//q为临时变量,将头节点赋值给q
for (i = 1; i <= n; i++) {
p = (ListNode *) malloc(sizeof(ListNode));
p->data =i;//初始化p的data
q->next=p;//将q指向p的首地址
q=p;//p为尾结点,将p赋值给临时变量q
}
p->next=L->next;//使最后一个结点指向第一个结点,使之构成一个循环
return L;
}
LinkList ListDelete(int n,int m,LinkList L){
int i,l;
ListNode *p, *q;
p=L;
for(i=1;i<=n;i++){
for(l=1;l<m;l++){
p=p->next;//p是第l-1个(待删除项)
}
q=p->next;
p->next=q->next;
printf("%d ",q->data);
free(q);
L=p;
}
return L;
}
動作結果: