1339 - C语言程序设计教程(第三版)课后习题10.5
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。使用指针
Input
初始人数n
Output
最后一人的初始编号
Examples
Input
3
Output
2
Solution C++
#include<iostream> #include<cstring> using namespace std; bool a[1000]; int main() { memset(a,0,sizeof(a)); int n; cin>>n; bool *p=a; for (int i=0; i<n; i++) *(p+i)=true; int i=0; //i为每次循环时计数变量 int k=0; //k为按1,2,3报数时的计数变量 int m=0; //m为退出人数 while (m<n-1) { if (i==n) i=0; if (*(p+i)) k++; if (k==3) { *(p+i)=false; k=0; m++; } i++; } for (int i=0; i<n; i++) if (*(p+i)) { cout<<i+1<<endl; break; } return 0; }