题目:输入一个数字,如3,要求输出6个数字,1,1,2,2,3,3,即每个数字输出两次,组成的字符串符合要求:两个1中有1个数字,两个2中有2个数字,两个3中有三个数字,即312132,如果有多种排列方法,则全部输出
我的解法
#include <stdio.h>
#include <memory.h>
void SonFun(int num, int *flag,int Sum)
{
int *temp = new int[Sum];
for(int i=0; i<Sum; i++){
memcpy(temp,flag,Sum*sizeof(int));
if(i+num+1 >= Sum) break;
if(*(flag+i) != 0 || *(flag+i+num+1) != 0) continue;
*(flag+i) = num;
*(flag+i+num+1) = num;
if(num>1){
SonFun(num-1, flag, Sum);
memcpy(flag, temp, Sum*sizeof(int));
}
}
if(num == 1)
{
for(int i=0; i<Sum; i++){
if(*(flag+i) == 0) break;
}
if(i == Sum){
for(int j=0; j<Sum; j++){
printf("%d ",*(flag+j));
}
printf("\n");
}
}
delete []temp;
}
void MainFun(int num)
{
int *flag = new int[num*2];
int end = num*2;
for(int i=0; i<end; i++)
{
memset(flag, 0, sizeof(int)*num*2);
if(i+num+1 >= end) break;
*(flag+i) = num;
*(flag+i+num+1) = num;
SonFun(num-1, flag, end);
}
delete []flag;
}
int main(int argc,char **argv)
{
MainFun(8);
return 1;
}
欢迎大家批评指正,