24小时热门版块排行榜    

查看: 1844  |  回复: 19
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第廿四题:全排列的第100万项 已有5人参与

一个排列是一组对象的一个有序排列。比如3123是数字1、2、3和4的一个可能的排列。如果把所有的排列按照其数字or字母的大小顺序都列出来,那就成为一个全排列。比如0、1、2的全排列是:
012 021 102 120 201 210

那么,数字0、1、2、3、4、5、6、7、8和9的全排列的第100万项是多少?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+5): 鼓励交流~~ 2011-06-10 21:52:10
c语言非蛮力版
当时就乱写了个 也不清楚和上面的算法一样不一样
CODE:
#include
#include


char *euler24(int n){
        int a[10],i,j,i0;
        a[0]=1;
        for(i=1;i<10;i++)a[i]=a[i-1]*(i+1);

        for(i=0;i<10;i++){
                if(a[i]>=n){
                        i0=i+1;break;
                }
        }

        int b[i0];
        for(i=i0-2;i>=0;i--){
                b[i]=n/a[i];
                n%=a[i];
                if(n==0){
                        b[i]--;
                        n=a[i];
                }
        }  

        int p[i0];
        char str[i0+1];
        for(i=0;i
        for(i=0;i                 str[i]=p[b[i0-i-2]]+48;
                for(j=b[i0-i-2];j                         p[j]=p[j+1];
     
        }
        str[i0-1]=p[0]+48;
        str[i0]='\0';

        return strdup(str);
}


int main(void){

        printf("%s\n",euler24(1000000));

        return 0;
}

[ Last edited by wangww2011 on 2011-6-10 at 13:28 ]
4楼2011-06-10 13:24:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见