今天是我加入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; }```