社区
数据结构与算法
帖子详情
求教10个数字的排列算法--一个有趣的数学问题。
jklq
2004-12-14 08:46:38
0-9共十个数字球,如果每次从其中拿出两个数组成不重复的组合(不管取出的球的顺序,比如01和10相同,算是一种组合),如01,02,03....89。共有45种组合。计算公式:10×9/2=45。
问题是:如何能把这45种组合,做出九个排列(45/5=9)。使每一个排列都有0,1,2,3,4,5,6,7,8,9这10个数。问题好像很简单,哪位高手能排出来呢?我有个程序要用到。谢谢各位关注!
...全文
1302
42
打赏
收藏
求教10个数字的排列算法--一个有趣的数学问题。
0-9共十个数字球,如果每次从其中拿出两个数组成不重复的组合(不管取出的球的顺序,比如01和10相同,算是一种组合),如01,02,03....89。共有45种组合。计算公式:10×9/2=45。 问题是:如何能把这45种组合,做出九个排列(45/5=9)。使每一个排列都有0,1,2,3,4,5,6,7,8,9这10个数。问题好像很简单,哪位高手能排出来呢?我有个程序要用到。谢谢各位关注!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
42 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
寻开心
2004-12-28
打赏
举报
回复
这个问题的不重复的解可真多
加入了遍历算法后,一分钟能够生成350万个解
按照math的计算结果,要验证它,我需要7个小时
不玩啦。
mathe
2004-12-26
打赏
举报
回复
完全不同的解有396个。
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 17 26 38 59
05 16 28 37 49
06 12 39 47 58
07 13 29 48 56
08 19 24 36 57
09 18 27 35 46
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 16 27 38 59
05 17 28 36 49
06 12 39 47 58
07 13 29 48 56
08 19 26 34 57
09 18 25 37 46
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 16 27 38 59
05 18 26 37 49
06 12 39 47 58
07 13 29 48 56
08 19 24 36 57
09 17 28 35 46
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 17 26 38 59
05 18 27 36 49
06 12 39 47 58
07 13 29 48 56
08 19 25 37 46
09 16 28 34 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 17 26 38 59
05 18 27 36 49
06 12 39 47 58
07 16 29 35 48
08 19 24 37 56
09 13 28 46 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 16 28 37 59
05 17 26 38 49
06 12 39 47 58
07 13 29 48 56
08 19 24 36 57
09 18 27 35 46
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 17 28 36 59
05 16 27 38 49
06 12 39 47 58
07 13 29 48 56
08 19 26 34 57
09 18 25 37 46
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 18 27 36 59
05 17 26 38 49
06 12 39 47 58
07 13 29 48 56
08 19 25 37 46
09 16 28 34 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 18 27 36 59
05 17 26 38 49
06 12 39 47 58
07 16 29 35 48
08 19 24 37 56
09 13 28 46 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 17 26 38 59
05 16 28 37 49
06 12 39 47 58
07 18 29 35 46
08 19 24 36 57
09 13 27 48 56
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 16 27 38 59
05 17 28 36 49
06 12 39 47 58
07 18 29 34 56
08 19 25 37 46
09 13 26 48 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 16 27 38 59
05 17 28 36 49
06 12 39 47 58
07 18 29 35 46
08 19 24 37 56
09 13 26 48 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 16 28 37 59
05 17 26 38 49
06 12 39 47 58
07 18 29 35 46
08 19 24 36 57
09 13 27 48 56
01 23 45 67 89
02 14 35 68 79
03 15 24 69 78
04 17 28 36 59
05 16 27 38 49
06 12 39 47 58
07 18 29 34 56
08 19 25 37 46
09 13 26 48 57
01 23 45 67 89
02 15 34 68 79
03 14 25 69 78
04 17 28 36 59
05 16 27 38 49
06 12 39 47 58
07 18 29 35 46
08 19 24 37 56
09 13 26 48 57
01 23 45 67 89
02 16 34 58 79
03 14 25 69 78
04 13 27 59 68
05 17 26 38 49
06 12 39 48 57
07 18 29 35 46
08 19 24 37 56
09 15 28 36 47
01 23 45 67 89
02 14 36 58 79
03 15 24 69 78
04 12 37 59 68
05 16 27 38 49
06 17 25 39 48
07 18 29 35 46
08 19 26 34 57
09 13 28 47 56
01 23 45 67 89
02 13 46 58 79
03 14 25 69 78
04 12 37 59 68
05 17 26 38 49
06 15 27 39 48
07 18 29 34 56
08 19 24 36 57
09 16 28 35 47
01 23 45 67 89
02 16 34 58 79
03 14 25 69 78
04 12 37 59 68
05 17 26 38 49
06 15 27 39 48
07 18 29 35 46
08 19 24 36 57
09 13 28 47 56
01 23 45 67 89
02 13 46 58 79
03 15 24 69 78
04 12 37 59 68
05 16 27 38 49
06 17 25 39 48
07 18 29 34 56
08 19 26 35 47
09 14 28 36 57
01 23 45 67 89
02 14 36 58 79
03 15 24 69 78
04 12 37 59 68
05 16 27 38 49
06 17 25 39 48
07 18 29 34 56
08 19 26 35 47
09 13 28 46 57
01 23 45 67 89
02 16 34 58 79
03 15 24 69 78
04 13 27 59 68
05 17 28 36 49
06 12 39 48 57
07 14 29 38 56
08 19 26 35 47
09 18 25 37 46
...
总共文件54K
ywyw
2004-12-25
打赏
举报
回复
mark
mathe
2004-12-25
打赏
举报
回复
其实大部分结果都是本质上相同的,它们相互间可以通过交换不同的数的位置得到,比如对于
01 27 35 46 89
02 15 37 49 68
03 12 47 58 69
04 17 26 38 59
05 14 28 39 67
06 19 25 34 78
07 13 29 48 56
08 16 23 45 79
09 18 24 36 57
我们交换2和7,3和5,可以得到
01 27 35 46 89
02 15 79 48 36
03 14 78 59 26
04 12 67 58 39
05 17 24 38 69
06 19 37 45 28
07 13 25 49 68
08 16 57 34 29
09 18 47 56 23
所以我们可以认为上面二种本质上是相同的。
现在问:如果把所有本质上相同的解分成一类,那么总共又多少类?:)
mathe
2004-12-24
打赏
举报
回复
呵呵,文件out99中最后两个解(同前面的区别就比较大了)
01 27 35 46 89
02 15 37 49 68
03 12 47 58 69
04 17 26 38 59
05 14 28 39 67
06 19 25 34 78
07 13 29 48 56
08 16 23 45 79
09 18 24 36 57
01 27 35 49 68
02 15 37 46 89
03 12 47 58 69
04 17 26 38 59
05 14 28 39 67
06 19 25 34 78
07 13 29 48 56
08 16 23 45 79
09 18 24 36 57
mathe
2004-12-24
打赏
举报
回复
通过定义宏DEBUG
比如
gcc -O3 -DDEBUG filename.c -o output
就可以让程序输出所有结果到113个148M的文件
(呵呵,当然你的磁盘空间要足够大,我的Linux在输出到103个文件时就把磁盘空间给用光了)
#include <stdio.h>
#define N 10
#define M (N*(N-1)/2)
int BUF[M];
int ROW[N][N-1];//if digit j is used in ROW i then ROW[i][j]=1
#define index(i,j) (j)*((j)-1)/2+(i)
#define elem(i,j) ((i)<(j))?(index(i,j)):(index(j,i))
#define SET(i,j,x) BUF[elem(i,j)]=(x)+1
#define GET(i,j) ((i==j)?INVALID:BUF[elem(i,j)]-1)
#define UNSET(i,j) BUF[elem(i,j)]=0
#define INVALID -1
FILE *out;
int tcount;
#ifdef DEBUG
void output()
{
int i,j,k;
if(tcount%1024000==0){
char f[10];
sprintf(f,"out%d",(int)(tcount/1024000));
if(out)fclose(out);
out=fopen(f,"w");
}
for(k=0;k<N-1;k++){
for(i=0;i<N;i++){
for(j=i+1;j<N;j++){
if(GET(i,j)==k)fprintf(out,"%d%d ",i,j);
}
}
fprintf(out,"\n");
}
fprintf(out,"\n");
}
#else
void output()
{
}
#endif
long long search(int i,int j)
{
int k;
long long count=0;
for(k=0;k<N-1;k++){
if(!ROW[i][k]&&!ROW[j][k]){
//Have a try to set element (i,j) to k
SET(i,j,k);
ROW[i][k]=1;
ROW[j][k]=1;
if(i==N-2&&j==N-1){
//Get a solution
output();
count++;
tcount++;
}else{
count+=(j==N-1)?search(i+1,i+2):search(i,j+1);
}
//Recover states
UNSET(i,j);
ROW[i][k]=0;
ROW[j][k]=0;
}
}
return count;
}
int main()
{
int i,j;
for(j=1;j<N;j++){
SET(0,j,j-1);
ROW[0][j-1]=1;
ROW[j][j-1]=1;
}
printf("Total %lld solutions\n",search(1,2));
}
xdspower
2004-12-24
打赏
举报
回复
楼主新的想法不错,不过应该没有构造完,比如你的第5个就还可以用前面的方法构造新的组合可能。
mathe
2004-12-24
打赏
举报
回复
贴出前面几个转化格式后的解:
01 23 46 59 78
02 13 48 56 79
03 12 49 57 68
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 46 59 78
02 13 49 57 68
03 12 48 56 79
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 48 56 79
02 13 46 59 78
03 12 49 57 68
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 49 57 68
02 13 46 59 78
03 12 48 56 79
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 48 56 79
02 13 49 57 68
03 12 46 59 78
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 49 57 68
02 13 48 56 79
03 12 46 59 78
04 15 28 37 69
05 14 29 38 67
06 17 24 39 58
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 46 58 79
02 13 48 57 69
03 12 49 56 78
04 15 28 39 67
05 14 29 37 68
06 17 24 38 59
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 46 58 79
02 13 49 56 78
03 12 48 57 69
04 15 28 39 67
05 14 29 37 68
06 17 24 38 59
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 48 57 69
02 13 46 58 79
03 12 49 56 78
04 15 28 39 67
05 14 29 37 68
06 17 24 38 59
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
01 23 49 56 78
02 13 46 58 79
03 12 48 57 69
04 15 28 39 67
05 14 29 37 68
06 17 24 38 59
07 16 25 34 89
08 19 26 35 47
09 18 27 36 45
mathe
2004-12-24
打赏
举报
回复
计算机还挺快,运行79分钟,总共
1,225,566,720个解。
mathe
2004-12-24
打赏
举报
回复
To happy__888([顾问团]寻开心):
我上面给出的列表不是直接结果,而是中间结果,
就像我上面说的,这些给出的是一些10X10方阵。
比如方阵:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 9 8 7 6
2 3 0 5 9 8 7 4 6 1
3 2 5 0 7 6 4 9 1 8
4 5 9 7 0 1 8 6 3 2
5 4 8 6 1 0 2 3 9 7
6 9 7 4 8 2 0 1 5 3
7 8 4 9 6 3 1 0 2 5
8 7 6 1 3 9 5 2 0 4
9 6 1 8 2 7 3 5 4 0
其中位置(0,1)对应的元素是1,也就是说,组合01在第一组。
同样,位置(0,2)对应的元素是2,所以组合02在第二组。
寻开心
2004-12-24
打赏
举报
回复
但组计算的问题解决了
在计算下一组的算法上可能存在问题,现在忙,过两天再来调试。
应该不止这么几个的
寻开心
2004-12-24
打赏
举报
回复
总共找到了6组
第1个
01 23 45 67 89
02 13 46 58 79
03 12 47 59 68
04 15 26 39 78
05 14 27 38 69
06 17 28 35 49
07 18 29 34 56
08 19 24 36 57
09 16 25 37 48
第2个
02 34 56 79 18
03 14 57 69 28
04 13 59 26 78
05 16 27 49 38
06 15 29 48 37
07 19 35 68 24
08 25 17 39 46
09 36 12 47 58
23 45 89 01 67
第3个
03 45 68 12 79
04 15 69 23 78
05 14 67 29 38
06 17 34 25 89
07 16 39 24 58
08 26 47 13 59
09 27 35 18 46
19 37 48 02 56
28 57 01 36 49
第4个
04 56 78 19 23
05 16 79 28 34
06 17 24 35 89
07 18 36 45 29
08 25 47 13 69
09 37 12 46 58
14 38 59 02 67
26 48 01 39 57
49 68 15 03 27
第5个
05 67 89 24 13
06 18 23 45 79
07 19 25 38 46
08 26 37 59 14
09 27 48 16 35
12 39 56 04 78
15 47 68 29 03
28 49 36 01 57
58 69 34 02 17
第6个
06 79 12 34 58
07 19 24 68 35
08 23 45 69 17
09 27 46 15 38
13 28 49 67 05
14 56 78 39 02
16 57 03 29 48
37 04 18 26 59
89 01 25 36 47
寻开心
2004-12-24
打赏
举报
回复
写了一个小生成程序,计算出了一组
01 23 45 67 89
02 13 46 58 79
03 12 47 59 68
04 15 26 39 78
05 14 27 38 69
06 17 28 35 49
07 18 29 34 56
08 19 24 36 57
09 16 25 37 48
稍后再完善一下程序,看看可以生成多少组结果
jklq
2004-12-23
打赏
举报
回复
谢谢各位高手的关注,我手工找到了解决办法:列出来给各位分享。结果如下:
10个数分成偶数和奇数两行,上下组合
02468
13579
得到01 23 45 67 89 (暂时不计算在内)
偶数向后移动一个数,由02468变成24680,上下组合。以后每次偶数都向后移动一位后和奇数组合得到以下四个结果。
1。 12 34 56 78 90
2。 14 36 58 70 92
3。 16 38 50 72 94
4。 18 30 52 74 96
另外,每次由01 23 45 67 89 中的一个和其他全单全偶组合成剩下的5种组合,(注意下面每组都是上下组合的)如下:
5。 0 2 3 4 5
1 8 9 6 7
6。 2 4 5 6 7
3 0 1 8 9
7。 4 6 7 8 9
5 2 3 0 1
8。 6 8 9 0 1
7 4 5 2 3
9。 8 0 1 2 3
9 6 7 4 5
大家发现以上5种排列组合的特点了吗。挺好玩的。
wangmin_yjitx
2004-12-23
打赏
举报
回复
对以上两位解决问题的执着和科学认真态度致敬!!!!!!!
寻开心
2004-12-23
打赏
举报
回复
那就是说每个组合在这个排列当中仅出现一次
那么下面这个就不可能是正解啊,因为01 10是相同的组合,他们多次出现了
01 23 45 67 89
10 32 54 98 76
23 05 98 74 61
32 50 76 49 18
45 97 01 86 32
54 86 10 23 97
69 74 82 01 53
78 49 63 10 25
87 61 39 52 04
96 18 27 35 40
mathe前面给出手工构造的那个才是
12 39 48 57 60
13 20 49 58 67
14 23 59 68 70
15 24 30 69 78
16 25 34 79 80
17 26 35 40 89
18 27 36 45 90
19 28 37 46 50
10 29 38 47 56
而能够满足这样条件的结果不会很多吧
mathe
2004-12-23
打赏
举报
回复
10个数中取两个数,总共只有45个组合,也就是下面45种组合:
12 39 48 57 60
13 20 49 58 67
14 23 59 68 70
15 24 30 69 78
16 25 34 79 80
17 26 35 40 89
18 27 36 45 90
19 28 37 46 50
10 29 38 47 56
现在要求将这15个组合分成9组,要求每组5个组合中0,1,...,9都正好出现一次
寻开心
2004-12-23
打赏
举报
回复
问题:
10个数,每次取两个,有45种组合。
把这45种组合,做出九个排列(45/5=9)
使每一个排列都有0,1,2,3,4,5,6,7,8,9这10个数。
想法:
只要是10个数的全排列当中的任何一个,都可以对应出满足楼主的一个解
既然是全排列,肯定包含的是0到9这个数而且不重复,每两个都对应45个组合当中的一个
全排列当中会有2^5个等价的排列,去除他们之后,在剩余的所有的可能当中任意取多少都可以的啊
为什么有 45/5=9 个排列的说法呢?
mathe
2004-12-23
打赏
举报
回复
估计一下,解的总体数目大概在5×10^10种左右。
mathe
2004-12-23
打赏
举报
回复
hehe,最后一个数据漏了最后一行,当然就是
9618275340了(根据对称性)
加载更多回复(22)
算法
-蓝桥杯习题(3-3)
蓝桥杯习题 目录 入门训练(详见
算法
-蓝桥杯习题(1-1))Go 基础练习(详见
算法
-蓝桥杯习题(2-1))Go 基础练习(详见
算法
-蓝桥杯习题(2-2))Go
算法
训练(详见
算法
-蓝桥杯习题(3-1))Go
算法
训练(详见
算法
-蓝桥杯习题(3-2))Go
算法
训练(详见
算法
-蓝桥杯习题(3-3))Go
算法
训练(详见
算法
-蓝桥杯习题(3-4))Go 算...
蓝桥杯练习系统习题-
算法
训练3
蓝桥杯练习系统习题-
算法
训练3 题目搜索方式:Ctrl+F—-> 输入题目名称—>定位到解答.
算法
训练 弹弹堂
问题
描述 XX无聊玩弹弹堂,战斗力太低啦! 输入格式 测试数据的输入一定会满足的格式。 例:输入的第一行包含两个整数n, m,分别表示矩阵的行数和列数。接下来n行,每行m个正整数,表示输入的矩阵。 输出格式 要求用户的
论各种排序
算法
初学
算法
,这里发表一下自己对排序的见解,顺便向大家
求教
如何找一本或者怎么能够学好
算法
,不会忘记,现在好多书只教如何理解发明者发明的代码,代码我们可以看懂,这不难,如何学到这里面的思想呢?学到了思想才能举一反三,否则,真的就是去学代码了。不敢妄自评论《
算法
导论》这类被高端人士奉为经典的书,只因我才疏学浅,并不能感受到其中奥秘,所以如何让我们这种脑子并不是灵活又想学
算法
思想这类小程序员有更好的学习呢?
MetaAPP笔试复盘(我真的很菜,还有1/3多没做完)
是线下面试,下午一点开始,进去找到自己的面试官就可以开始了。动态规划定义dp[i][j] 为0-i-1 与 0-j-1 的最长公共子序列的长度如果当前i与j的字。题目解释这道题说白了就是给
一个
区间,在
一个
循环队列中寻找
一个
特定的
数字
,并将些相同的
数字
对应的下标两。Vue.js的双向绑定是通过响应式系统实现的。3-25投递,3-30一面,10分钟kpi速通,问我集成运放的内部结构,忘了,好,没
问题
了,,就这么。Node.js的事件循环是一种异步编程模型,基于单线程进行事件驱动的处理。
2021 Java面试真题集锦
目录 … 1 大厂面试的基本流程 17 字节跳动 17 阿里 17 腾讯 18 网易游戏 18 面试前需要准备: 18 面试中可以借鉴的套路 19 用简历争取到更多的面试机会 19 自我介绍时,立即全面抛出技术栈和亮点 20 先介绍项目背景,打消面试官疑问 21 通过说项目管理工具,说明你不仅会写代码 22 用 SPRING BOOT 项目举例,说明你的技术基本面 23 用实例说明你在内存调优方面的经验 24 展示你在数据库调优方面的经验 25 总结前文说辞 26 准备项目说辞时,更可以准备后继面试官的问
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章