(算法)求1,2,3,4,5共有多少种质数组合且不能同时出现一个数多次

#include <stdio.h>

#include <math.h>

#define MAX_NUM 54321 //组合上限

#define MAX_LEN 100  //结果数组最大长度

#define N 5    //组合数最大长度

//判断一个数是不是质数 int isPrime(int n);

//切分整数到数组中 void cutNum(int n, int * tArr, int * len);

//判断数组中数据是否越界 int isIn(int * tArr, int len);

//判断数组中数据是否重复 int isNoRep(int * tArr, int len);

//打印数组 void printArr(int * tArr, int len);

int main() {  

 int i;

 int cnt; //结果数量

 int len; //数字长度  

 int iArr[MAX_LEN]; //数组保存结果

 int tArr[N]; //临时数组保存中间结果    

 //取数  for (i=2, cnt=0; i < MAX_NUM; i++)

 {

  //切割数到数组中  

 cutNum(i, tArr, &len);

  //判断数有没有越限   

if (!isIn(tArr, len))   

{    

  continue;  

 }     

 //判断数有没有重复   if (!isNoRep(tArr, len))  

 {   

   continue;   

}      

//判断是不是质数  

   if (!isPrime(i))   

{    

  continue;  

 }

  //满足条件保存到结果数组中  

 iArr[cnt] = i;   

cnt++;   

 }

 //打印结果  printArr(iArr, cnt);  getchar(); }

//判断一个数是不是质数

int isPrime(int n)

{

 int i;    

int rst = 1;    

for (i=2; i <= sqrt(n); i++)

 {   

  if(0 == n % i)  

   {    

    rst = 0;    

    break;   

  }

 }

 return rst;

}

//切分整数到数组中

void cutNum(int n, int * tArr, int * len)

{  

int i;

 for(i = 0; n > 0; i++)  {   tArr[i] = n % 10;   n /= 10;  }

 *len = i;

}

//判断数组中数据是否越界 int isIn(int * tArr, int len)

{

  int i;

  int rst = 1;    

  for (i = 0; i < len; i++)  

  {  

     if ((tArr[i] > 5) || (0 == tArr[i]))   

    {    

      rst = 0;    

      break;   

    }

   }

 return rst;

}

//判断数组中数据是否重复 int isNoRep(int * tArr, int len)

{  

 int i, j;

 int rst = 1;    

for (i = 0; i < len-1; i++)

 {

    for(j = i + 1; j < len; j++)  

   {    

      if (tArr[i] == tArr[j])  

      {     

      rst = 0;     

      break;    

      }  

   }  

}

 return rst; 

}

//打印数组 void printArr(int * tArr, int len)

{  

int i;

 for (i = 0; i < len; i++)

 {  

   printf("%d\t", tArr[i]);

 }  

printf("\n共%d\n", len);

}

原文地址:https://www.cnblogs.com/ethanwill/p/3110560.html