#include <stdio.h>
#include<stdlib.h>
struct Node {
int number;
int code;
struct Node* next;
};
void iflegal(int n,int k,int m){
if(n<=0){
printf("请输入正整数的人数!");
exit(0);
}
if(k<=0||k>n){
printf("请在0到%d的范围内输入k的值!",n);
exit (0);
}
if(m<=0){
printf("初始密码需要大于0!");
exit (0);
}
}
struct Node* creatlist(int n) {
printf("请依次输入各个人的各自密码,用回车键分开或用空格隔开在一行输入\n");
int a,b;
b=scanf("%d",&a);
if (b != 1) {
printf("请输入正确格式!\n");
exit(0);
}
if (a <= 0) {
printf("请输入正整数!");
exit(0);
}
struct Node* p;
struct Node* q;
p = (struct Node*)malloc(sizeof(struct Node));
if (p == NULL) {
printf("内存分配失败!");
}
q = p;
p->number = 1;
p->code=a;
struct Node* o;
if(n>1){
for (int m = 1; m < n; m++) {
b=scanf("%d", &a);
if (b != 1) {
printf("请输入正确格式!\n");
exit(0);
}
if (a <= 0) {
printf("请输入正整数!");
exit(0);
}
o = (struct Node*)malloc(sizeof(struct Node));
o->number = m + 1;
o->code = a;
q->next = o;
q = o;
if(m==n-1){
printf("\n\t循环开始!\n");
}
}
o->next = p;
return o;
}
else if(n==1){
printf("\n\t循环开始!\n");
return p;
}
}
int main() {
int n, m,k,i,j;
struct Node* p, * q;
printf("请输入总人数:");
if(!scanf("%d",&n)){
printf("请输入正确格式的数字!");
return -1;
}
printf("请输入初始开始位置(0<k<=%d):",n);
if(!scanf("%d",&k)){
printf("请输入正确格式的数字!");
return -1;
}
printf("请输入初始密码:");
if(!scanf("%d",&m)){
printf("请输入正确格式的数字!");
return -1;
}
iflegal(n,k,m);
p = creatlist(n);
if(n==1){
printf("%d",p->number);
return 0;
}
if(k>1){
for(i=1;i<k;i++){
p=p->next;
}
}
for ( i = 1; i <= n; i++) {
for ( j = 1; j < m; j++) {
p = p->next;
}
q = p->next;
m = q->code;
printf("%d\n", q->number);
p->next = q->next;
free(q);
}
return 0;
}