问题描述
试题编号: | 201712-2 |
试题名称: | 游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 输入格式 输入一行,包括两个整数n和k,意义如题目所述。 输出格式 输出一行,包含一个整数,表示获胜的小朋友编号。 样例输入 5 2 样例输出 3 样例输入 7 3 样例输出 4 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。 |
代码:简单模拟
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int d[maxn];
int n,k;
bool isF(int a){
if(a%k==0) return true;
if(a%10==k) return true;
return false;
}
int main(){
cin>>n>>k;
int id=0,fri=0;
int temp=n;
while(n!=1){
//fri为报数 id为小朋友
fri++;id++;
//要找到下一个顺序没有被淘汰的小朋友~
if(id>temp) id=1;
while(d[id]==1){
id++;
if(id>temp) id=1;
}
if(isF(fri)){
n--;
d[id]=1;
}
}
for(int i=1;i<=temp;i++){
if(d[i]==0){
cout<<i;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
queue<int> q;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
q.push(i);
int t=1,u=1;
while(!q.empty())
{
u=q.front();
q.pop();
if(t%k==0||t%10==k);
else q.push(u);
t++;
}
printf("%d\n",u);
return 0;
}