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

命题人:外部导入

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

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

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

样例输入
3

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

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;
}```
文章作者: Hao.Jia
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hao.Jia's Blog
题解 简单
喜欢就支持一下吧