昨天晚上没事做,通宵看书看电影,6点多的时候把黑书里数据结构例题里的小球钟给做了。 这题是简单的队列加栈模拟,不过有用到一点置换群的概念; 代码如下: #include<iostream> #include<stack> #include<queue> using namespace std; queue<int> q; bool use[1010]; int num[1010]; stack<int> s1,s2,s3; void swap(int&a,int&b) { if(a>=b) return ; int temp=a; a=b; b=temp; } int gcd(int a,int b) { if(b!=0) return gcd(b,a%b); return a; } int main() { int n,i,j,rec; int temp,cnt,tt; while(1) { cin>>n; if(n==0) break; for(i=0;i<1010;i++) use[i]=false; while(!q.empty()) q.pop(); for(i=1;i<=n;i++) q.push(i); for(i=1;i<=1440;i++) { temp=q.front(); q.pop(); s1.push(temp); if(s1.size()==5) { temp=s1.top(); s1.pop(); s2.push(temp); for(j=1;j<=4;j++) { temp=s1.top(); s1.pop(); q.push(temp); } } if(s2.size()==12) { temp=s2.top(); s2.pop(); s3.push(temp); for(j=1;j<=11;j++) { temp=s2.top(); s2.pop(); q.push(temp); } } if(s3.size()==12) { tt=s3.top(); s3.pop(); for(j=1;j<=11;j++) { temp=s3.top(); s3.pop(); q.push(temp); } q.push(tt); } } temp=1; for(i=1;i<=n;i++) { num[i]=q.front(); q.pop(); } for(i=1;i<=n;i++) { if(use[i]) continue; cnt=0; j=i; while(!use[j]) { use[j]=true; j=num[j]; cnt++; } temp=temp*cnt/gcd(temp,cnt); } cout<<temp<<endl; } return 0; }