其实是一个朋友的作业啦。
我因为这几天事情实在太多,木有时间去写就拿出来给有时间的朋友,有兴趣的朋友做做,其实很简单的排列组合问题:输入四个数字,比如(0,2,3,5),然后再输入一个长度(比如5),然后输出所有5位长的刚才那四个数字的组合,。比如 00235,02335等等
150分,先到先得。,

解决方案 »

  1.   

    vcmute(横秋):
    不要按顺序,要把所有的组合都输出。比如 52032、35202, 22305等等
      

  2.   

    int a[4]={0,2,3,5};
    for(int i1=0;i1<4;i1++)
       for(int i2=0;i2<4;i2++)
          for(int i3=0;i3<4;i3++)
            for(int i4=0;i4<4;i4++)
                for(int i5=0;i5<4;i5++)
                {
                  printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
                 }
      

  3.   

    int a[4]={0,2,3,5};
    for(int i1=0;i1<4;i1++)
       for(int i2=0;i2<4;i2++)
          for(int i3=0;i3<4;i3++)
            for(int i4=0;i4<4;i4++)
                for(int i5=0;i5<4;i5++)
                {
                  printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
                 }
      

  4.   


    void foo(const vector<int>& vec, size_t n)
    {
        if (n == 0)
        {
            cout << endl;
            return;
        }
        
        for (vector<int>::const_iterator cIter = vec.begin(); cIter != vec.end(); ++cIter)
        {
            cout << *cIter;
            foo(vec, n - 1);
        }
    }
      

  5.   

    定义一个数组装那四个数,然后for循环就可以了
      

  6.   

    # define SIDE_N 3 
    # define LENGTH 3 
    # define VARIABLES 6 
    int A,B,C,D,E,F; 
    int *pt[]={&A,&B,&C,&D,&E,&F}; 
    int *side[SIDE_N][LENGTH]={&A,&B,&C,&C,&D,&E,&E,&F,&A}; 
    int side_total[SIDE_N]; 
    main{} 
    { int i,j,t,equal; 
    for (j=0;j<VARIABLES;j++) 
    *pt[j]=j+1; 
    while(1) 
    { for (i=0;i<SIDE_N;i++) 
    { for (t=j=0;j<LENGTH;j++) 
    t+=*side[i][j]; 
    side_total[i]=t; 

    for (equal=1,i=0;equal&&i<SIDE_N-1;i++) 
    if (side_total[i]!=side_total[i+1] equal=0; 
    if (equal) 
    { for (i=1;i<VARIABLES;i++) 
    printf(“%4d”,*pt[i]); 
    printf(“\n”); 
    scanf(“%*c”); 

    for (j=VARIABLES-1;j>0;j--) 
    if (*pt[j]>*pt[j-1]) break; 
    if (j==0) break; 
    for (i=VARIABLES-1;i>=j;i--) 
    if (*pt[i]>*pt[i-1]) break; 
    t=*pt[j-1];* pt[j-1] =* pt[i]; *pt[i]=t; 
    for (i=VARIABLES-1;i>j;i--,j++) 
    { t=*pt[j]; *pt[j] =* pt[i]; *pt[i]=t; } 

    }
      

  7.   

    int a[4]={0,2,3,5};
    for(int i1=0;i1<4;i1++)
       for(int i2=0;i2<4;i2++)
          for(int i3=0;i3<4;i3++)
            for(int i4=0;i4<4;i4++)
                for(int i5=0;i5<4;i5++)
                {
                  printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
                 }
    这种方法不错
      

  8.   

    用递归法:
    #define MAXLEN 1024
    int num[MAXLEN];
    int numlen;void line(int a1,int a2,int a3,int a4,int len)
    {
        if(len==0)
        {
            for(int i=0;i<numlen;i++)
            {
                printf("%1d",num[i]);
            }
            printf("\n");
        }
        else
        {
            num[numlen-len]=a1;
            line(a1,a2,a3,a4,len-1);
            num[numlen-len]=a2;
            line(a1,a2,a3,a4,len-1);
            num[numlen-len]=a3;
            line(a1,a2,a3,a4,len-1);
            num[numlen-len]=a4;
            line(a1,a2,a3,a4,len-1);
        }
    }int main(int argc, char* argv[])
    {
        int a1,a2,a3,a4,len;
        printf("please input 4 number and length:\n");
        scanf("%1d %1d %1d %1d %d",&a1,&a2,&a3,&a4,&len);
        a1=a1%10;
        if(a1==a2||a1==a3||a1==a4||a2==a3||a2==a4||a3==a4||len<0||len>MAXLEN)
        {
            printf("error!");
            return 0;
        }
        numlen=len;
        line(a1,a2,a3,a4,len);
        return 0;
    }