| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1849 人关注过本帖, 1 人收藏
标题:我也来发个求排列的题
只看楼主 加入收藏
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 20楼 草狼
不要高精度?求围观
2012-06-01 18:33
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 19楼 czz5242199
你可以用这组数据来测
1
19 12164510040883199
1 3 9 11 5 6 7 8 10 2 19 12 4 17 13 14 15 16 18

看你的程序多久后输出大答案
2012-06-01 18:35
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 21楼 czz5242199
晚点会放上代码的
2012-06-01 18:35
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:2 
哦,我犯2了,好像确实不要高精度,我看成了数据时10^63.我觉得这组数据应该是瞬秒吧。目测0 .01s以内
2012-06-01 18:37
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
程序代码:
#include <stdio.h>

int main()
{
    int a[20]={1,3,9,11,5,6,7,8,10,2,19,12,4,17,13,14,15,16,18},n=19,i,j,k;
    long long m=12164510040883199,p;
    
    
//    scanf("%d%ld",&n,&m);
//    for (i=0; i<n; i++) scanf("%d",&a[i]);
    
    p=1; for (i=1; i<n; i++) p*=i;
    m%=(p*n);
    
    for (j=n-1; j>=1; j--)
    {
      while (m>=p)   //这个循环每次最多允许n次
      {
            k=n-j-1; 
            m-=p;
            for (i=k+1; i<n; i++)
              if (a[i]==a[k]+1)
              {
                              a[k]++; a[i]--; break;
              }
      }
      p/=j;
    }
    
    for (i=0; i<n; i++) printf("%d ",a[i]);
    printf("\n");
    system("pause");
}
    
    


这组数据算出来结果是:2 19 11 10 9 8 7 6 5 1 18 4 3 17 16 15 14 13 12

不知是不是一样
2012-06-01 18:51
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 25楼 czz5242199
不一样

你测下这组多少
1
19 1216451
1 3 9 11 5 6 7 8 10 2 19 12 4 16 18 17 15 14 13

答案是
1 3 9 11 5 6 7 8 10 14 12 13 16 4 2 17 19 15 18
2012-06-01 19:19
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 26楼 草狼
不一样。。。不知道是谁的错了,你的数据时如何来的
2012-06-01 19:25
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 27楼 czz5242199
应该你的错了 呵呵

你可以用置顶贴中的代码去运行这个 他们的结果一定正确的 呵呵
2012-06-01 19:26
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:80 
呵呵,这题是草狼自己改的吧?有提交地址吗?

这个问题和我置顶那个问题的角度不同。

那一题n的范围大,k的范围小,所以从相邻排列之间的关系入手比较合适。

这一题n的范围小,k的范围大,所以从排列与其对应的序号的关系入手更合适。

n < 20 这个范围不是乱取的。它是64位整型能表示的最大的n!

我准备一下代码,请草狼尽快将提交地址发上来。很想尽快试试

重剑无锋,大巧不工
2012-06-01 19:28
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 28楼 草狼
嗯,确实错了,我找找看错在哪了
2012-06-01 19:32
快速回复:我也来发个求排列的题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031296 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved