Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
最小公倍数In Reply To:哪位仁兄帮忙看哈到底哪里有问题,挂得不行了 Posted by:baoer at 2008-05-04 23:55:26 > 算法: > 题目要求就是求出置换群最大周期,可以转化成为这样的问题: > 求X个自然数和为N,使其积最大.然后得到的X个数为一个内循环数, > 再按字典序生成目标置换. > > 代码: > #include <stdio.h> > #include <math.h> > > int main(void) > { > int t,n,i,j,k,x,m,sign,tt; > double sum,max,y; > scanf("%d",&t); > while(t--) > { > scanf("%d",&n); > max=n; > x=n; > tt=0; > for(i=1;i<=n;i++) > { > if(n%i==0) > { > sign=0; > sum=pow(i,n/i); > } > else if(n%i==1) > { > sign=0; > sum=pow(i,n/i-1)*(i+n%i); > } > else > { > sum=pow(i,n/i)*(n%i); > y=pow(i,n/i-1)*(i+n%i); > if(sum>=y) > sign=1; > else > { > sign=0; > sum=y; > } > } > if(sum>max) > { > max=sum; > x=i; > tt=sign; > } > } > printf("%.0lf ",max); > if(tt==1) > { > for(j=1;j<x-1;j++) > printf("%d ",j+1); > printf("1 "); > i=n%x+1; > } > else > i=1; > for(;i<n-x;i+=x) > { > for(j=i;j<i+x-1;j++) > printf("%d ",j+1); > printf("%d ",i); > } > for(j=i;j<n;j++) > printf("%d ",j+1); > printf("%d",i); > printf("\n"); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator