数学组合问题 10
求数学算法,列出所有组,和组中的所有元素1~10个元素,进行两两组合,并且分组,每组包含1~10的所有元素,组内不能出现重复元素,组之间不能出现重复组合,例如{1,10}...
求数学算法,列出所有组,和组中的所有元素
1~10个元素,进行两两组合,并且分组,每组包含1~10的所有元素,组内不能出现重复元素,组之间不能出现重复组合,例如{1,10}和{10,1}算相同组合 展开
1~10个元素,进行两两组合,并且分组,每组包含1~10的所有元素,组内不能出现重复元素,组之间不能出现重复组合,例如{1,10}和{10,1}算相同组合 展开
2个回答
展开全部
1~10是所有分组及所有元素:
{1,2}、{1,3}、{1,4}、{1,5}、{1,6}、{1,7}、{1,8}、{1,9}、{1,10},
{2,3}、{2,4}、{2,5}、{2,6}、{2,7}、{2,8}、{2,9}、{2,10},
{3,4}、{3,5}、{3,6}、{3,7}、{3,8}、{3,9}、{3,10},
{4,5}、{4,6}、{4,7}、{4,8}、{4,9}、{4,10},
{5,6}、{5,7}、{5,8}、{5,9}、{5,10},
{6,7}、{6,8}、{6,9}、{6,10},
{7,8}、{7,9}、{7,10},
{8,9}、{8,10},
{9,10}。
如有帮助,希望采纳,万分感谢。
{1,2}、{1,3}、{1,4}、{1,5}、{1,6}、{1,7}、{1,8}、{1,9}、{1,10},
{2,3}、{2,4}、{2,5}、{2,6}、{2,7}、{2,8}、{2,9}、{2,10},
{3,4}、{3,5}、{3,6}、{3,7}、{3,8}、{3,9}、{3,10},
{4,5}、{4,6}、{4,7}、{4,8}、{4,9}、{4,10},
{5,6}、{5,7}、{5,8}、{5,9}、{5,10},
{6,7}、{6,8}、{6,9}、{6,10},
{7,8}、{7,9}、{7,10},
{8,9}、{8,10},
{9,10}。
如有帮助,希望采纳,万分感谢。
追问
有什么算法或者规律吗,我想要的结果是最后分组
展开全部
"每组包含1~10的所有元素", 这个说法有问题吧.... 按这个说法应该是只有一个: { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
应该换成 "每组包含 1~10 的若干个元素" 吧....
我们考虑一个10位的二进制数 (b9 b8 b7 b6 b5 b4 b3 b2 b1 b0)2, 它从 (0000000000)2 开始, 每次递增 1, 最后到 (1111111111)2, 这样共经历过 1024 种状态, 它的每个二进制位分别代表 1~10号元素是否在组合内. 比如 (1110001011)2 表示, { 10, 9, 8, 4, 2, 1 } 的组合
显然, 该二进制数的状态一一对应题目所述的组合, 因此共有 1024 种 (包括空组合).....
以 c 语言为例:
int array [1024][10];
int i, j, k;
for ( i = 0; i < 1024; i ++ )
for ( j = k = 0, m = 1; j < 10; j++, m<<=1 )
if ( i & m ) array [ i ][k++] = j;
这样就穷举了 1024 种组合
如果是每个组合, 必须是有两个元素, 那就简单了, 从 1 开始, 遍历第一个元素, 然后从 它后面的元素开始, 遍历其余元素
int array [45][2];
int i, j, k;
for ( k = i = 0; i < 9; i ++ )
for (j = i+1; j < 0; j ++ )
{ array [ k ][ 0 ] = i; array [k++][ 1 ] = j; }
应该换成 "每组包含 1~10 的若干个元素" 吧....
我们考虑一个10位的二进制数 (b9 b8 b7 b6 b5 b4 b3 b2 b1 b0)2, 它从 (0000000000)2 开始, 每次递增 1, 最后到 (1111111111)2, 这样共经历过 1024 种状态, 它的每个二进制位分别代表 1~10号元素是否在组合内. 比如 (1110001011)2 表示, { 10, 9, 8, 4, 2, 1 } 的组合
显然, 该二进制数的状态一一对应题目所述的组合, 因此共有 1024 种 (包括空组合).....
以 c 语言为例:
int array [1024][10];
int i, j, k;
for ( i = 0; i < 1024; i ++ )
for ( j = k = 0, m = 1; j < 10; j++, m<<=1 )
if ( i & m ) array [ i ][k++] = j;
这样就穷举了 1024 种组合
如果是每个组合, 必须是有两个元素, 那就简单了, 从 1 开始, 遍历第一个元素, 然后从 它后面的元素开始, 遍历其余元素
int array [45][2];
int i, j, k;
for ( k = i = 0; i < 9; i ++ )
for (j = i+1; j < 0; j ++ )
{ array [ k ][ 0 ] = i; array [k++][ 1 ] = j; }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询