| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1997 人关注过本帖
标题:排列组合
只看楼主 加入收藏
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
再问一下
一楼给出的程序
数组a内的元素都是唯一不重复的么

Only the Code Tells the Truth             K.I.S.S
2015-04-06 12:09
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
按照a数组内元素唯一给出代码:

程序代码:
#include <stdio.h>
#include <string.h>
#define N 5
#define M 3

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))

void foo(char* s, int from, int to);

int main(void) {
    char str[2 * N - M + 1] = "12345";
    char s[M + 1] = {0};
    int i, j;

    for(i = N, j = 0; i < N + M - 1; i++, j++)
        str[i] = str[j];

    puts(str);

    for(i = 0; i < N; i++) {
        for(j = i; j < i + M; j++) {
            s[j - i] = str[j];
        }

        foo(s, 0, strlen(s) - 1);
    }

    putchar('\n');
    return 0;
}

void foo(char *s, int from, int to) {
    int i, j, t;

    if(to <= 1) return;

    if(from == to) {
        for(i = 0; i <= to; i++) putchar(s[i]);

        putchar('\t');

    } else {
        for(j = from; j <= to; j++) {
            SWAP(s[j], s[from], t);
            foo(s, from + 1, to);
            SWAP(s[j], s[from], t);
        }
    }
}

Only the Code Tells the Truth             K.I.S.S
2015-04-06 12:50
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 10楼 longwu9t
你帮我写下那个组合问题吖  我怎么都弄不对

风回小院庭芜绿,柳眼春相续
2015-04-06 13:11
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 13楼 纳兰伽香
你觉着我在12楼给出的代码不符合你的要求么?
如果是那样
请把你的要求说清楚
我看能不能写出相应的代码……

Only the Code Tells the Truth             K.I.S.S
2015-04-06 13:13
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 14楼 longwu9t
你调用我一楼给的那两个函数啊  看怎么给我改一下 还有
图片附件: 游客没有浏览图片的权限,请 登录注册


这里的123  132  231 都是同一个数吖  这样的有一个就行了  
你看看我的实例要求吖

风回小院庭芜绿,柳眼春相续
2015-04-06 13:22
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
用递归肯定没错,不过一楼代码是5选3全排列代码,如果组合则不需要从1循环,而是从t+1循环,把递归函数里的for语句修改如下(未验证):
        for (i = t+1; i <= n; i++)
2015-04-06 13:50
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 16楼 xzlxzlxzl
这种问题   我们老师说  用回朔法  是这个题目的最简单的方法 1楼的代码 就是回朔法 但是我就是调用不对

风回小院庭芜绿,柳眼春相续
2015-04-06 13:52
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 17楼 纳兰伽香
我不懂什么回溯法,我只知道看到你的select函数自己调用自己,这就是递归。你可以试试我说的修改,看能不能达到你的要求(我不会写c代码,也不会用c ide)汗~!
2015-04-06 14:17
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 18楼 xzlxzlxzl
哦哦  Σ( ° △ °|||)︴

风回小院庭芜绿,柳眼春相续
2015-04-06 14:18
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
自顶

风回小院庭芜绿,柳眼春相续
2015-04-06 19:00
快速回复:排列组合
数据加载中...
 
   



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

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