#include<iostream>
#include<malloc.h>
#include<vector>
using namespace std;
struct LinkNode //鏈表結(jié)點(diǎn)結(jié)構(gòu)體
{
int no; //結(jié)點(diǎn)的數(shù)據(jù)
LinkNode *next;//代表后一個(gè)結(jié)點(diǎn)的地址
};
int getStartnum(vector<int> pokerRing,int luckyNum) {//實(shí)現(xiàn)方法
int l=pokerRing.size();//傳進(jìn)來的撲克牌數(shù)據(jù)數(shù)組
LinkNode *p,*q,*first;//定義結(jié)點(diǎn)
for(int z=0; z<l; z++) { //pokerRing數(shù)組的下標(biāo),嘗試從 pokerRing[0], pokerRing[1],pokerRing[...] 作為出發(fā)點(diǎn)
p=(LinkNode*)malloc(sizeof(LinkNode));//給p獲取內(nèi)存
first=p;//first結(jié)點(diǎn)指向p結(jié)點(diǎn)
p->no=pokerRing[0];//p結(jié)點(diǎn)值設(shè)為數(shù)組的第一個(gè)數(shù)據(jù)值
for(int i=1; i<l; i++) {//循環(huán)將數(shù)組值給鏈表賦值
q=(LinkNode*)malloc(sizeof(LinkNode));
q->no=pokerRing[i];
p->next=q;
p=q;
}
//此時(shí)結(jié)點(diǎn)p為鏈表的尾結(jié)點(diǎn)
p->next=first;//p的下一個(gè)結(jié)點(diǎn)地址指向first,使鏈表成環(huán)
p=first;//結(jié)點(diǎn)p指向頭結(jié)點(diǎn)
for(int i=0; i<z; i++) {//結(jié)點(diǎn)p向后移動(dòng)z個(gè)位置,z為0時(shí),p還是頭結(jié)點(diǎn)
p=p->next;
}
int m=p->no;//把p結(jié)點(diǎn)的值賦給m ,對(duì)應(yīng)題目中取當(dāng)前牌的數(shù)字
while(p->next!=p) {//當(dāng)p結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)為本身時(shí),結(jié)束循環(huán),即 只剩下一個(gè)結(jié)點(diǎn)
for(int i=1; i<m; i++) {//循環(huán)移動(dòng)m-1位,對(duì)應(yīng)題目中前進(jìn)n-1步
p=p->next;
}
//此時(shí)p結(jié)點(diǎn)是應(yīng)刪除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)
p->next=p->next->next;//刪除p結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),即題目中"移除所到達(dá)的牌"
p=p->next;//p結(jié)點(diǎn)指向刪除牌的下一張牌下一張牌
m=p->no;//取當(dāng)前牌的值
}
//while循環(huán)結(jié)束鏈表只剩一個(gè)結(jié)點(diǎn),即最終剩余的牌
if(p->no==luckyNum) {//如果該結(jié)點(diǎn)的值等于傳進(jìn)來的幸運(yùn)數(shù)字
return pokerRing[z];//返回開始牌的數(shù)字
}
}
return -1;//如果分別以所有牌數(shù)字為開始牌都無法使剩下的牌為幸運(yùn)數(shù)字,就返回-1
}
int main()
{
vector<int> pokerRing;//定義動(dòng)態(tài)數(shù)組
int n;
cin>>n;//輸入牌張數(shù)
for(int i=0; i<n; i++) {//給數(shù)組循環(huán)賦值
int b;
cin>>b;
pokerRing.push_back(b);
}
int luckyNum;
cin>>luckyNum;//輸入幸運(yùn)數(shù)字
cout<<getStartnum(pokerRing,luckyNum)<<endl;//輸出結(jié)果
return 0;
}

