• 3、给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇


    给出一个区间[a, b],计算区间内“神奇数”的个数。
    神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
    比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。 

    输入描述:
    输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。

    输出描述:

    输出为一个整数,表示区间内满足条件的整数个数

    输入例子:
    11 20

    输出例子:
    6

    思路:把区间内的数字拆分成所有可能的两位数,判断新的两位数是否为素数

     1 #include<stdio.h>
     2 #include <stdlib.h>
     3 #include <math.h>
     4 #include <vector>
     5 using namespace std;
     6 
     7 bool isPrime(int num) { //判断素数的函数 
     8     for (int i = 2;i <= sqrt(num);i++) {
     9         if (num%i == 0) 
    10             return false;
    11     }
    12     return true;
    13 }
    14  
    15 int main()
    16 {
    17     int a, b, count = 0;
    18     scanf("%d %d",&a,&b); 
    19     if(b<=10)
    20     {
    21         printf("0");
    22         return 0;
    23     }
    24     for(int i=a;i<=b;i++)
    25     {
    26         bool isS = false;
    27         vector<int> arr;
    28         int tmp = i;
    29         while (tmp)
    30         {
    31             arr.push_back(tmp % 10);//吧范围内的数 每个数位放进数组中 
    32             tmp /= 10;
    33         }
    34  
    35         for (int j = 0;j<arr.size();j++)//用j表示十位 
    36         {    
    37             if(arr[j]==0)//是偶数,j选下一个值 
    38             {
    39                 continue;
    40             }
    41             
    42             for(int k=0;k<arr.size();k++)//用k表示个位 
    43             {
    44                 if(k==j)//十位和个位不能选同一个数位,k选下一个 
    45                 {
    46                     continue;
    47                 }
    48                 
    49                 int now = arr[j] * 10 + arr[k];//组成的jk这个两位数 
    50               
    51                 if(isPrime(now))
    52                 {
    53                     
    54                     isS = true;
    55                     printf("\%d ",now); //输出组成的饿素数,此题不需要输出 
    56                     break;//是神奇的数,则不用检测jk其他情况
    57                 }
    58             }
    59             
    60             if (isS)//如果已经是神奇的数,就不用再检测后面不同j的情况了
    61             {
    62                 count++;
    63                 break;
    64             }
    65         }
    66          
    67     }
    68     printf("
    %d",count);//此题不需要换行
    69     return 0;
    70 }

    
    

    
    
  • 相关阅读:
    基本数据类型
    运算
    登录程序
    MySQL索引
    内存泄漏排查&CPU负载高排查
    dubbo
    SPI
    缓存,热点key
    Java BigDecimal
    Spring Bean's life
  • 原文地址:https://www.cnblogs.com/olivegyr/p/6978571.html
Copyright © 2020-2023  润新知