D、Q数球问题(队列)

今天是我加入acm的第一天,非常激动,但同样也意识到自己面临的挑战,首先便是上周五的新生赛的补题任务。
1265: D 、Q数球
时间限制: 2 Sec 内存限制: 128 MB
提交: 15 解决: 6

命题人:外部导入

题目描述
小D和小Q是很好的兄弟,整天都是呆在一起;近日,他们闲着无事,玩一种游戏打发时间,他们把n个球按顺序编号,排成一个圆,从第一个球开始数,每数到第三个球,就把那个球拿出去,他们想看看最后剩下的球的编号是多少?

输入
输入有多组数据,每组数据输入n (n <= 10000);代表多少个球

输出
输出最后剩下的球的编号

样例输入
3

样例输出
2
这个D、Q数球问题,想了很久,先是考虑了函数,然而并没有想到好的循环还有删除元素方法。
最后通过查找相关资料了解到了我的新知识:队列模拟。每当数了一个数,就把他放到数列的最后一个,如果要删除,则只需将后面的全体向前覆盖一位。还有就是要注意多组输入。

#include
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
int main()
{
int n,i,k,result;
int a[10001],t;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
a[i]=i+1;
}
while(n!=1)
{
for(k=1;k<=2;k++)
{
i=0;
t=a[i];
for(i=0;i<n-1;i++)
{
a[i]=a[i+1];
}
a[n-1]=t;
}
for(i=0;i<n;i++)
{
a[i]=a[i+1];
}
n--;
}
printf("%d\n",a[0]);
}
return 0;
}
坚持原创技术分享,您的支持也将成为我的动力!
-------------本文结束感谢您的阅读-------------
undefined