试题编号: | 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。 |
题目分析:
这道题也许是想考察循环队列的用法,最后还是想用一个静态数组解决;
满分代码的想法是将数字与队列分离,队列用0、1表示是否淘汰,判断条件是对用的数字是否满足淘汰条件。
其实90分的代码思想也是这样,只是将数字与队列合并,用0表示淘汰。就是不知道卡到那些测试样例上了。
/*100*/
# include<cstdio>
int a[1010];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i = 0;i < n;++i)
a[i] = 1;
int cnt = 0,idx = -1,snum = n;
while(snum)
{
idx = (idx+1) % n;
if(a[idx])
{
cnt++;
if(cnt%10 == k || cnt%k == 0)
{
a[idx] = 0;
snum--;
}
}
if(snum == 1)
break;
}
for(int i = 1;i <= n;++i)
{
if(a[i])
printf("%d\n",i+1);
}
return 0;
}
/*90
# include<cstdio>
int a[1010];
int main()
{
int n,k,i = 1;
scanf("%d%d",&n,&k);
int count = n,t;
for(i = 1;i <= n;++i)
{
a[i] = i;
if(i%k == 0 || i%10 == k)
{
a[i] = 0;
count--;
}
}
for(int m = i;count > 1;++m)
{
t = m%n;
if(t == 0)
t = n;
if(a[t])
{
if(i%k == 0 || i%10 == k)
{
a[t] = 0;
count--;
}
else
a[t] = i;
i++;
}
}
for(int i = 1;i <= n;++i)
{
if(a[i])
printf("%d\n",i);
}
return 0;
}
*/