for(int i=123;i<=543;i++)
{
    if((i的个位、十位、百位中有两个相同)||(i的个位、十位、百位中有一个大于5或者小于1)
        continue;
    
}这样应该差不多吧,你试试。

解决方案 »

  1.   

    两个函数:
    第一个,  列出 从给定的五个数中取出三个(组合问题) 的所有情况
    第二个, 列出对给定的三个数进行排列的所有情况函数实现:第一个函数://从 5 个数字中选出 3 个的组合
    // 5 个数字保存在数组 arrayM 中( 此处认为arrayM中的数字不相同 )
    bool  Select3from5(long arrayM[] )
    {
             const long M=5;
             const long N=3;
             long i,j ,k;
             //开辟一个数组用来存储每次选出的那 3 个数字
             long * arrayN  = new long[3];
             //从第一个元素开始循环
             for(i =0;i<= M-N;i++)
             {
                      arrayN[0] = arrayM[i] ;
                      for( j = i + 1 ; j <= M - N + 1 ; j++)
                      {
                               arrayN[1] = arrayM[j] ;
                               for( k = j + 1 ; k <= M - N + 2 ; k++)
                               {
                                        arrayN[2] = arrayM[k] ;
                                        printf("%d\t%d\t%d\n",arrayN[0], arrayN[1],arrayN[2]);                            }//end for k
                        }//end for j
              }//end for i
         
              delete [] arrayN;          return TRUE;
    }
      

  2.   

    大家想一想通用情况 ,第一个函数的通用情况:
    如何列出所有 从M 个数字的数组 arrayM 中 选出 N 个数字的情况?我已经用函数递归的方法实现了,我想看看别的非递归的方法.
      

  3.   

    第二个函数//列出对 3 个元素的数组 arrayN 进行排列的所有情况
    bool Permutation(const long arrayN[] )
    {
             const long N =3;
             long i,j ,k ;
             //开辟一个数组用来存储每次排列以后的 数字
             long * arrayN2 =new long[N];
             //都先给arrayN2赋值为arrayN
             for( k =0 ; k < N; k++ )
                     arrayN2[k] = arrayN[k];
             //打印未交换之前的排列
             printf("%d\t%d\t%d\n", arrayN2[0],arrayN2[1],arrayN2[2]);
             //以下采用两两交换的方法求出所有排列
             for( i = 0; i<  N - 1 ; i++)
              {
                       for( j = i + 1 ; j< N  ; j++)
                       {
                               //每次都先给arrayN2赋值为arrayN
                               for( k =0 ; k < N; k++ )
                                          arrayN2[k] = arrayN[k];
                                //交换 arrayN2 的  i, j 元素
                                long t = arrayN2[i] ; 
                                arrayN2[i] =  arrayN2[j] ;
                                arrayN2[j] =  t;
                                //打印
                                printf("%d\t%d\t%d\n", arrayN2[0],arrayN2[1],arrayN2[2]);
                        }
             }
             delete [] arrayN2;
             return TRUE;
    }
      

  4.   

    #include "stdafx.h"
    #include "stdio.h"
    int List[5]={1,2,3,4,5};
    void Swap(int &x,int &y)
    {
     int temp=0;
     temp=x;
     x=y;
     y=temp;
    }
    void Perm(int List[],int k,int m)
    {
      int i;
      if(k==m)
      {for(i=0;i<m;i++)
       printf("%d",List[i]);
       printf("%c",'\n');
      }
      else
      for(i=k;i<m;i++)
      {
       Swap(List[k],List[i]);
       Perm(List,k+1,m);
       Swap(List[k],List[i]);
      }
    }
    int main(int argc, char* argv[])
    {
      for(int i=0;i<3;i++)
    Perm(List+i,0,3);
    }
    123
    132
    213
    231
    321
    312
    234
    243
    324
    342
    432
    423
    345
    354
    435
    453
    543
    534
      

  5.   

    oh 高错了,下面是真确的#include "stdafx.h"
    #include "stdio.h"
    int List[5]={1,2,3,4,5};void Swap(int &x,int &y)
    {
     int temp=0;
     temp=x;
     x=y;
     y=temp;
    }
    void Perm(int List[],int k,int m)
    {
      int i;
      if(k==m)
      {for(i=0;i<m;i++)
       printf("%d",List[i]);
       printf("%c",'\n');
      }  for(i=k;i<5;i++)
       {
      Swap(List[k],List[i]);
          Perm(List,k+1,m);
          Swap(List[k],List[i]);
       }
     
    }void main(int argc, char* argv[])
    {   Perm(List,0,3);}
    123
    124
    125
    132
    134
    135
    143
    142
    145
    153
    154
    152
    213
    214
    215
    231
    234
    235
    243
    241
    245
    253
    254
    251
    321
    324
    325
    312
    314
    315
    341
    342
    345
    351
    354
    352
    423
    421
    425
    432
    431
    435
    413
    412
    415
    453
    451
    452
    523
    524
    521
    532
    534
    531
    543
    542
    541
    513
    514
    512
         60种
      

  6.   

    不要从副的,下面
    #include "stdafx.h"
    #include "stdio.h"
    int List[5]={1,2,3,4,5};void Swap(int &x,int &y)
    {
     int temp=0;
     temp=x;
     x=y;
     y=temp;
    }
    bool judg()
    {
     if(List[0]>List[1])return false;
     if(List[0]>List[2])return false;
     if(List[1]>List[2])return false;
     return true;
    }
    void Perm(int List[],int k,int m)
    {
      int i;
      if(k==m&&judg())
      {for(i=0;i<m;i++)
         printf("%d",List[i]);
       printf("%c",'\n');
      }  for(i=k;i<5;i++)
       {
      Swap(List[k],List[i]);
          Perm(List,k+1,m);
          Swap(List[k],List[i]);
       }
     
    }void main(int argc, char* argv[])
    {   Perm(List,0,3);}
    123
    124
    125
    134
    135
    145
    234
    235
    245
    345