zoukankan      html  css  js  c++  java
  • (算法)求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);

    }

  • 相关阅读:
    Linux-解决putty无法直接使用root用户远程登录linux主机的问题
    Linux-安装jdk
    Linux-安装谷歌浏览器
    Linux-安装ssh服务
    java正则表达式匹配文本中想要的字符串
    日常技术资源收集
    《java编程思想》:散列的原理
    《java编程思想》:字符串
    win10完美去除快捷方式小箭头
    WS_2012
  • 原文地址:https://www.cnblogs.com/ethanwill/p/3110560.html
Copyright © 2011-2022 走看看