您的位置:首页 > 其它

康托展开

2015-01-30 20:13 141 查看
康托展开

#include

#define n 3

int main()

{

        
int fac[]={1,1,2},num=0,temp,i,j,s[]={3,2,1};

        
for(i=0;i

        
{

                  
temp=0;

                  
for(j=i+1;j

                  
{

                           
if(s[j]

                           
temp++;//判断几个数小于它

                  
}       

                  
num+=fac[n-i-1]*temp;//(或num=num+fac[n-i-1]*temp;)

        
}

        
printf("%d\n",num+1);

        
return 0;

}

//6

康托逆展开

#include

int main()

{

                  
int fac[]={1,1,2,6,24},h[6]={1,2,3,4,5};

                  
int res[5];

                  
int i,j,l,t,x=16,k=5;

                  
x--;

                  
for(i=1;i<=k;i++)

                  
{

                           
t=x/fac[k-i];

                           
x-=t*fac[k-i];

                           
for(j=1,l=0;l<=t;j++)

                           
if(h[j]!=-1)

                                    
l++;

                           
j--;

                           
h[j]=-1;

        
                  
res[i-1]=j;

                  
}

                  
for(i=0;i<5;i++)

                  
printf("%d",res[i]);

                  
putchar(10);

                  
return 0;

}

//14352

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: