神奇数--全国模拟
Posted qqky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神奇数--全国模拟相关的知识,希望对你有一定的参考价值。
[编程题] 神奇数
时间限制:1秒
空间限制:32768K
给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。
输出描述:
输出为一个整数,表示区间内满足条件的整数个数
输入例子:
11 20
输出例子:
6
解题思路:
1)遍历a-b 特殊情况判断如果b<=10 输出0,如果a<=10 a=11
2)将数按位存在wei中,然后在wei中取两位组成result1和result2
3)判断result1和result2是否为质数
本题注意:题目中1 ≤ a ≤ b ≤ 10000实际测试时例子11 11111没有进行b的范围的判断,因此不需要管题目说明中b的最大范围
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main() 6 { 7 int a; 8 int b; 9 vector<int> wei1;//倒序存储每一位 10 vector<int> wei;//正序存储每一位 11 int tmp; 12 int result1 = 0; 13 int result2 = 0; 14 while(cin>>a>>b) 15 { 16 int count=0; 17 int num = 0; 18 if(b <= 10) 19 cout<<count<<endl; 20 else 21 { 22 if(a<=10) 23 a = 11; 24 for(int i=a;i<=b;i++) 25 { 26 num=0; 27 tmp = i; 28 while(tmp) 29 { 30 wei1.push_back(tmp%10); 31 tmp = tmp/10; 32 } 33 for(int x=wei1.size()-1;x>=0;x--) 34 { 35 wei.push_back(wei1[x]); 36 } 37 38 39 for(int k=0;k<wei.size();k++) 40 { 41 for(int z=k+1;z<wei.size();z++) 42 { 43 num = 0;//此处别忘了num置0 44 result1 = wei[k]*10+wei[z]; 45 result2 = wei[z]*10+wei[k]; 46 //判断result是否为质数 47 if(result1/10 == 0) 48 { 49 result1 = 0; 50 num++; 51 } 52 53 for(int j=2;j<result1;j++) 54 { 55 if(result1%j==0) 56 { 57 num++; 58 } 59 } 60 if(num == 0) 61 { 62 break; 63 } 64 65 else 66 { 67 num = 0; 68 if(result2/10 == 0) 69 { 70 result2 = 0; 71 num++; 72 } 73 74 for(int j=2;j<result2;j++) 75 { 76 if(result2%j==0) 77 { 78 num++; 79 break; 80 } 81 } 82 if(num == 0) 83 { 84 break; 85 } 86 } 87 } 88 89 if(num == 0) 90 { 91 count++; 92 break; 93 } 94 } 95 wei.clear(); 96 wei1.clear(); 97 } 98 } 99 cout<<count<<endl; 100 } 101 }
以上是关于神奇数--全国模拟的主要内容,如果未能解决你的问题,请参考以下文章
2017年校招全国统一模拟笔试(第三场)编程题集合--Python