#include<iostream>
#include<cstring> //指针初始化都是 NULL
using namespace std;
typedef struct person
{
int data;
person *next;
}person;
person * create( int n ) //构建循环链表
{
person *temp =NULL; //建一个指针
if(0!=n) //如果不是空的
{
int j = 1;
person * p_perso = NULL;
p_perso = new person[n]; //新开个结构指针
if(NULL == p_perso)
{
return NULL;
}
else
{
memset(p_perso,0,sizeof(p_perso));
}
temp = p_perso;
while(j < n) //数组的初始化
{
p_perso -> data = j;
p_perso -> next = p_perso + 1; //既然是数组,则每一个数组需要变成下一个
p_perso = p_perso -> next;//加 1 就是指针的地址指向数组的下一个。
j++;
}
p_perso -> data = n;
p_perso -> next = temp;
}
return temp;
}
int main()
{
person *p = NULL;
person *r = NULL;
int all,first,loop;
cin >> all >> first >>loop;
p = create(all); //传入指针(循环链表的指针)
r = p;
for(int i = 0; i < first - 1;i++)
{
r = r->next;
}
while(r->data != r->next->data)
{
int i = 1;
for(;i < loop-1 ; i ++)
{
r = r -> next;
}
cout << r -> next -> data <<" ";
r -> next = r -> next -> next; //原来的指向指向下一个 (删除操作)
r = r->next ; //和删除无关,只是让指向下一个然后继续走。
}
cout << r-> data << endl;
delete [] p;
// delete [] r;
return 0;
}
/*
#include<iostream>
using namespace std;
int main(){
int N,M;
cin>>N>>M;
int* a=new int[N];
for(int i=0;i<N;i++){
a[i]=i+1;
}
int countN=0;
int countM=0;
for(int i=0;;i++){
if(a[i%N]!=-1){
countM++;
}
if(countM==M){
cout<<a[i%N]<<" ";
a[i%N]=-1;
countN++;
countM=0;
}
if(countN==N){
break;
}
}
delete a;
return 0;
}
*/
//第二种方法:数字处理,和灭灯问题一样。然其它关了的变成-1,不是的话就+1 ;加到要求值输出
//真傻瓜,就用了取%的操作,就每次可以自觉返回初始。
#include<cstring> //指针初始化都是 NULL
using namespace std;
typedef struct person
{
int data;
person *next;
}person;
person * create( int n ) //构建循环链表
{
person *temp =NULL; //建一个指针
if(0!=n) //如果不是空的
{
int j = 1;
person * p_perso = NULL;
p_perso = new person[n]; //新开个结构指针
if(NULL == p_perso)
{
return NULL;
}
else
{
memset(p_perso,0,sizeof(p_perso));
}
temp = p_perso;
while(j < n) //数组的初始化
{
p_perso -> data = j;
p_perso -> next = p_perso + 1; //既然是数组,则每一个数组需要变成下一个
p_perso = p_perso -> next;//加 1 就是指针的地址指向数组的下一个。
j++;
}
p_perso -> data = n;
p_perso -> next = temp;
}
return temp;
}
int main()
{
person *p = NULL;
person *r = NULL;
int all,first,loop;
cin >> all >> first >>loop;
p = create(all); //传入指针(循环链表的指针)
r = p;
for(int i = 0; i < first - 1;i++)
{
r = r->next;
}
while(r->data != r->next->data)
{
int i = 1;
for(;i < loop-1 ; i ++)
{
r = r -> next;
}
cout << r -> next -> data <<" ";
r -> next = r -> next -> next; //原来的指向指向下一个 (删除操作)
r = r->next ; //和删除无关,只是让指向下一个然后继续走。
}
cout << r-> data << endl;
delete [] p;
// delete [] r;
return 0;
}
/*
#include<iostream>
using namespace std;
int main(){
int N,M;
cin>>N>>M;
int* a=new int[N];
for(int i=0;i<N;i++){
a[i]=i+1;
}
int countN=0;
int countM=0;
for(int i=0;;i++){
if(a[i%N]!=-1){
countM++;
}
if(countM==M){
cout<<a[i%N]<<" ";
a[i%N]=-1;
countN++;
countM=0;
}
if(countN==N){
break;
}
}
delete a;
return 0;
}
*/
//第二种方法:数字处理,和灭灯问题一样。然其它关了的变成-1,不是的话就+1 ;加到要求值输出
//真傻瓜,就用了取%的操作,就每次可以自觉返回初始。