第一次ACM
2008-5-31
昨天被人叫去看了一个人的空间,突然有兴趣试试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; }
可恨我上学期C++没学好!简单题目也不懂,呵呵,晕!