读书人

分组进行排列的有关问题

发布时间: 2012-09-18 16:21:42 作者: rapoo

分组进行排列的问题
用C实现生成一串字符串。
该字符串可选定分为几组(或者说几块),每组的字符集不同,分别对每组进行排列(排列中允许字符重复出现),最后拼成一个整体。
比如,一个要生成一个4位字符串,前2位为一组,后2位为一组。前一组字符集为asd,后一组字符集为qwe。
那么,可生成字符串 81 种。如下:aaqq aaqw aaqe aawq aaww aawe aaeq aaew aaee asqq asqw 。。。。。。。。。。。。ddeq ddew ddee 一共应该是(3*3)*(3*3)= 81个。

怎么实现?求教~~~~~~~

[解决办法]
我正好写了排列组合问题。思想大致雷同,希望能对你有所帮助。时间有限不能仔细分析,你自己研究一下吧

C/C++ code
#include <stdio.h>int Swap(char *a,char *b){    char c;    c = *a;    *a = *b;    *b = c;}/* * 递归思想实现选排,不可重复 */void Perm(char *list, int k, int m, int s){    //从list数组中k以后的子串中选排m个元素.s是总的选排个数    int i;    if(k == s || m == 0) {//已经选排完成,输出这个排列方式        for(i=0;i<s;i++)putchar(list[i]);        putchar('\n');    }    else    {        for (i=k; list[i]!='\0'; i++) {            Swap (&list[k], &list[i]);            Perm (list, k+1, m-1,s);//排列右子串            Swap (&list [k], &list [i]);        }    }}int main(int argc ,char *argv[]){    char string[10] = "123";    Perm(string,0,2,2);    return 0;} 

读书人网 >C语言

热点推荐