| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1997 人关注过本帖
标题:排列组合
只看楼主 加入收藏
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 40楼 SunshineGirl
哦哦  下标肯定是连续的  但是数组怎么手动得到?

风回小院庭芜绿,柳眼春相续
2015-04-16 17:12
SunshineGirl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:129
专家分:131
注 册:2012-3-20
收藏
得分:0 
回复 41楼 纳兰伽香
你能得到 数组 a 吗?

int* b = malloc(n * sizeof(int));
for (int i = 1; i <= n; i++)
{
     b[i-1] = i;
}
2015-04-16 17:15
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 42楼 SunshineGirl
我已经彻底晕了 int combination[N+1] = {0};是做什么的  
我就想手动输入个N M 的值  根据N  手动得到一个数组

我还是再仔细看看

风回小院庭芜绿,柳眼春相续
2015-04-16 17:18
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 43楼 纳兰伽香
程序代码:
我现在就是想 

int i,N,M;
scanf("%d%d",&N,&M);
int a[N];
for(i = 0;i<N;i++)
{
    scanf("%d",&a[i]);
}

然后对得到的a[N];进行操作。

风回小院庭芜绿,柳眼春相续
2015-04-16 17:25
SunshineGirl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:129
专家分:131
注 册:2012-3-20
收藏
得分:0 
回复 44楼 纳兰伽香
其实就是 for 循环的递归写法,
记录深度优先搜索每个深度节点的值

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

仔细看看这个数值是怎么来的,数学计算怎么算

[ 本帖最后由 SunshineGirl 于 2015-4-16 17:37 编辑 ]
2015-04-16 17:32
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 45楼 SunshineGirl
恩恩  好的 。深度优先搜索!!!貌似是数据结构里面的,不怎么懂。我仔细研究下。
你能给我实现我楼上说的那个要求么?

风回小院庭芜绿,柳眼春相续
2015-04-16 17:39
SunshineGirl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:129
专家分:131
注 册:2012-3-20
收藏
得分:0 
回复 46楼 纳兰伽香
可以
2015-04-16 17:44
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 47楼 SunshineGirl
3KU

风回小院庭芜绿,柳眼春相续
2015-04-16 17:58
SunshineGirl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:129
专家分:131
注 册:2012-3-20
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

int a[] = {1, 2, 3, 4, 5};
void recursion(int* combination, int m, int n, int begin, int depth);

int main(void)
{
    int m = sizeof(a) / sizeof(a[0]);
    int n = 2;
    
    int* combination = (int*)malloc(sizeof(int) * m);
    recursion(combination, m, n, 1, 1);

    getchar();
    return 0;
} 

void recursion(int* combination, int m, int n, int begin, int depth)
{
    int i, j;
    
    for (i = begin; i <= m; i++)
    {
        combination[depth] = i;
        
        if (depth == n)
        {
            for (j = 1; j <= n; j++)
            {
                printf("%d ", a[combination[j]-1]);
            }
            
            printf("\n");
        }
        else
        {
            recursion(combination, m, n, i+1, depth+1);
        }
    }
}


你千万不要告诉我,a[], m, n 你不知道怎么输入得到

[ 本帖最后由 SunshineGirl 于 2015-4-16 18:16 编辑 ]
2015-04-16 18:09
SunshineGirl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:129
专家分:131
注 册:2012-3-20
收藏
得分:0 
回复 16楼 xzlxzlxzl
想法是对的
2015-04-16 18:23
快速回复:排列组合
数据加载中...
 
   



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

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