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);

    }

  • 相关阅读:
    eclipse 下载 WindowBuilder
    CLOB、BLOB , CLOB与BLOB的区别
    rpm 安装并配置MySQL(包含指定数据存储路径)
    此Flash Player 与您的地区不相容,请重新安装Adobe Flash Player问题解决
    Eclipse 如何添加 更换字体(转载)
    Eclipse安装WebJavaEE插件、Eclipse编写HTML代码(综合问题统一记录)
    关于hp proliant sl210t服务器raid 1阵列配置(HP P420/Smart Array P420阵列卡配置)
    LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项
    安装Linux系统时LSI RAID卡的驱动挂载
    IBM x3250m5安装redhat 6.5 加载raid卡驱动
  • 原文地址:https://www.cnblogs.com/ethanwill/p/3110560.html
Copyright © 2011-2022 走看看