首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

排列组合的有关问题

2012-03-21 
排列组合的问题我有n组数据集合。比如n3时为{123}{abc}{ABCD}怎么样把它排列组合出来有些兄弟会说这样写fo

排列组合的问题
我有n组数据集合。比如n=3时   为   {123}   {abc}   {ABCD}   怎么样把它排列组合出来

有些兄弟会说这样写  
for(i=1;i <=3;i++)  
for(j=a;j <=c;j++)  
for(k=A;k <=D;k++)  
.......  

但是在n个集合不确定的情况下,应该怎么写。
在线等~  


[解决办法]
这是我很早之前写的,
稍微改改就符合你的要求了
//N 个数字的所有排列组合
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *arg=0;//数组
int Num=0;//数组个数
void fun(int x);
int t=0;
int main()
{
int i=0;
scanf( "%d ",&Num);
arg=(int*)malloc(sizeof(int)*Num);
for(i=0;i <Num;i++){
arg[i]=i+1;
}
fun(Num);
free(arg);
return 1;
}
void fun(int aix)
{
int temp=0;
int i=0;
int* p=NULL;
if(1==aix){
for(i=0;i <Num;i++)
printf( "%d ",arg[i]);
printf( "\n ");
}
if(2==aix){
fun(aix-1);
t=arg[0];
arg[0]=arg[1];
arg[1]=t;
fun(aix-1);
}
if(2 <aix){
p=(int*)malloc(sizeof(int)*aix);//临时数组
memcpy(p,arg,aix*sizeof(int));
for(i=0;i <aix;i++){
memcpy(arg,p,aix*sizeof(int));
temp=arg[i];
arg[i]=arg[aix-1];
arg[aix-1]=temp;
fun(aix-1);
}
memcpy(arg,p,aix*sizeof(int));
free(p);
}
}
[解决办法]
注释掉其他代码后的样子:

#include <iostream>

using namespace std;

char buf[256]={0};

void fun_recurse(char *arr[], int index, int index_buf)
{
for (int i = 0; i < (int)strlen(arr[index]); ++i)
{
buf[index_buf]= '\0 ';
if(i> 0 && index_buf> 0)cout < <buf;
cout < <arr[index][i];
if(arr[index+1] != NULL)
{
buf[index_buf] = arr[index][i];
fun_recurse(arr, index+1, index_buf+1);
}
else cout < <endl;
}
}

int main(void)
{
char *str1 = "ABC ";
char *str2 = "abc ";
char *str3 = "123 ";
char *str4 = "+-* ";
char *arr[] = {str1, str2, str3, str4, NULL}; //NULL 元素做结束标记
//给arr赋值不定元素即可,注意末尾的 NULL 是必须的,当然也可以是其他标记方式

fun_recurse(arr, 0, 0);
system( "pause ");
return 0;
}

热点排行