昨天被人叫去看了一个人的空间,突然有兴趣试试ACM。最近一直在看RIA相关的博客,了解了挺多,但开始怀疑自己有没有在进步。。网页相关方面 是进步了,但编程能力毫无疑问完全没长进,在没有实践的日子里,做下纯编程的东西还是挺好的,算法、编程能力是基础~~做了即使没成绩也有好处没坏处。很 久没编程,昨晚那么一试,竟然试到我睡不着。。本来一个多小时做完没再碰了,但我的脑袋估计是太久没运转了,一下子过度使用,搞到要睡觉的时候还十分活 跃,睡不着。。。这题提交了4次才被Accepted。。看到这个单词挺有成就感的~~呵~~~也许我对这个会三分钟热度,随我喜好了~~呵呵。。
此题是problem 1088:System Overload,类似于以前在课本上看到的“一群孩子围成一圈数数出列”的一道题,自然是简单题~~
#include <iostream>
using namespace std;
int a[150];
int b[150];
int m,n=1,r,p,cn;
void init(){
for(int i=0;i<150;i++)
a[i]=0;
m=0;
r=0;
p=0;
}
void popAt(int num,int cn){
while(num<cn){
a[num]=a[num+1];
num++;
}
a[cn]=0;
}
int calculate(int n){
init();
while(r!=2){
for(int i=0;i<n;i++)
a[i]=i+1;
m++;
cn=n;
popAt(0,cn-1);
cn--;
p=m;
while(cn>1){
while(p>cn)
p-=cn;
popAt(p-1,cn-1);
cn--;
p+=m-1;
}
r=a[0];
}
return m;
}
int main()
{
int k=0;
while(n!=0){
cin>>n;
if(n==0) break;
if(n<3||n>150) return 0;
b[k]=calculate(n);
k++;
}
for(int j=0;j<k;j++){
cout<<b[j]<<endl;
}
return 0;
}