Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9940 | Accepted: 4626 |
Description
Input
接下来每行输入一个小孩的名字(人名不超过15个字符)
最后一行输入W,S (W < N),用逗号","间隔
Output
Sample Input
5 Xiaoming Xiaohua Xiaowang Zhangsan Lisi 2,3
Sample Output
Zhangsan Xiaohua Xiaoming Xiaowang Lisi
法一:利用数组,模拟全过程。
代码:
#include <iostream> using namespace std; int cnt; string name[70]; int find(int a,int b) { int ans=b; while(ans--) { a++; if(a>cnt) a=1; while(name[a]=="0") { a++; if(a>cnt) a=1; } } return a; }
int main() { int t,n,m;
char c; cin>>t; cnt=t; for(int i=1;i<=t;i++) cin>>name[i]; cin>>n>>c>>m; int cur=n-1; while(t) { cur=find(cur,m); cout<<name[cur]<<endl; name[cur]="0"; t--; } return 0; }
法二:利用人员位置的向前移动。
代码:
#include <iostream> #include <string> using namespace std; int main() { int post[70]; int w,n,m; string name[20]; cin>>n; for(int i=0;i<n;i++) { cin>>name[i]; post[i]=i; } char c; cin>>w>>c>>m; w=(w+n-1)%n;//计算出初始位置 while(n) { w=(w+m-1)%n;//计算出孩子出列的下标 cout<<name[post[w]]<<endl; for(int k=w;k<n-1;k++)//w位置的孩子出列,该位置以后的孩子的位置向前移动一个位置 { post[k]=post[k+1]; } n--;//出列一个孩子,总人数减一 } return 0;
}