问题
有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。
跟群名似乎无关,但是感觉挺好玩 🤪
回答
C 语言模拟 @capwill2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <iostream> using namespace std; #define MAX 100000
int num[MAX];
int main() { int n,p; cin>>n>>p; int i=1,current_step=1,killed=0;
while(killed!=n-1){ if(current_step==p){ num[i]=1; killed++; cout<<"kill "<<i<<endl; current_step=0; } i++; if(i>n) i=1; if(num[i]==0) current_step++; }
for(int i=1;i<=n;i++) if(num[i]==0) cout<<"survivor: "<<i;
return 0; }
|
思路是用数组模拟循环链表。