分组进行排列的问题
用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;}