一个c编程问题,请各位高手帮帮我。

时间:2022-09-30 21:10:07
我想实现一个排列组合功能,第一个字符是nbm中的一个,第二个字符是uio中的一个,第三个字符是ghj中的一个,第四个字符是asd中的一个,第五个iop中的一个。比如:第一个字符取n,第二个字符取u,第三个字符取g,第四个字符取a,第五个字符取i,就打印出nugai。列出所有这样的数,打印出来。我刚学,请各位高手帮帮我!

5 个解决方案

#1


array[n]={"(n-1个字符串)"};
for(int i=0;i<n/3;)
{
   cout <<array[    rand()%3+i     ];
   i+=3;
}

#2


#include <stdio.h>

void main()
{
int i,j,k,l,m;
char ai[4]="nbm";
char aj[4]="uio";
char ak[4]="ghi";
char al[4]="asd";
char am[4]="iop";

for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
for(l=0;l<3;l++)
for(m=0;m<3;m++)
printf("%c%c%c%c%c\n",ai[i],aj[j],ak[k],al[l],am[m]);
}

#3


array[n]={"(n-1个字符串)"};
for(int i=0;i<n/3;)
{
   cout <<array[    rand()%3+i     ];
   i+=3;
}

能否给出解释一下

#4


整了一个 递归的:

#include <cstdlib>
#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 *arr[] = {"nbm", "uio", "ghj","asd","iop", NULL};  //NULL 元素做结束标记 
    fun_recurse(arr, 0, 0);  
    system("pause");
    return 0;
}

#5


解释就免了,
递归中的控制用言语描述起来有些麻烦,
楼主慢慢研究一下吧,
可以断点看看过程是怎么样的~~~

#1


array[n]={"(n-1个字符串)"};
for(int i=0;i<n/3;)
{
   cout <<array[    rand()%3+i     ];
   i+=3;
}

#2


#include <stdio.h>

void main()
{
int i,j,k,l,m;
char ai[4]="nbm";
char aj[4]="uio";
char ak[4]="ghi";
char al[4]="asd";
char am[4]="iop";

for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
for(l=0;l<3;l++)
for(m=0;m<3;m++)
printf("%c%c%c%c%c\n",ai[i],aj[j],ak[k],al[l],am[m]);
}

#3


array[n]={"(n-1个字符串)"};
for(int i=0;i<n/3;)
{
   cout <<array[    rand()%3+i     ];
   i+=3;
}

能否给出解释一下

#4


整了一个 递归的:

#include <cstdlib>
#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 *arr[] = {"nbm", "uio", "ghj","asd","iop", NULL};  //NULL 元素做结束标记 
    fun_recurse(arr, 0, 0);  
    system("pause");
    return 0;
}

#5


解释就免了,
递归中的控制用言语描述起来有些麻烦,
楼主慢慢研究一下吧,
可以断点看看过程是怎么样的~~~