1. 程式人生 > >神奇數--全國模擬(三)

神奇數--全國模擬(三)

iostream 情況 時間限制 ont space 1.8 範圍 height clu

[編程題] 神奇數 時間限制: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 }

神奇數--全國模擬(三)