【PAT甲級】Google Recruitment

  • 2019 年 11 月 8 日
  • 筆記

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/89449874

Problem Description:

In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the picture below) for recruitment. The content is super-simple, a URL consisting of the first 10-digit prime found in consecutive digits of the natural constant e. The person who could find this prime number could go to the next step in Google's hiring process by visiting this website.

The natural constant e is a well known transcendental number(超越數). The first several digits are: e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921… where the 10 digits in bold are the answer to Google's question.

Now you are asked to solve a more general problem: find the first K-digit prime in consecutive digits of any given L-digit number.

Input Specification:

Each input file contains one test case. Each case first gives in a line two positive integers: L (≤ 1,000) and K (< 10), which are the numbers of digits of the given number and the prime to be found, respectively. Then the L-digit number N is given in the next line.

Output Specification:

For each test case, print in a line the first K-digit prime in consecutive digits of N. If such a number does not exist, output 404 instead. Note: the leading zeroes must also be counted as part of the K digits. For example, to find the 4-digit prime in 200236, 0023 is a solution. However the first digit 2 must not be treated as a solution 0002 since the leading zeroes are not in the original number.

Sample Input 1:

20 5  23654987725541023819

Sample Output 1:

49877

Sample Input 2:

10 3  2468024680

Sample Output 2:

404

解題思路:

這道題在我第一次考乙級的時候遇到過:【PAT乙級】谷歌的招聘。我當時的思路是遍歷每個K位string型數字,先用c_str()函數強制轉換成char*型,再用atoi()函數強制轉換成int型判斷它是不是素數。若是素數,把該string型的K位數字賦值給result進行輸出,否則輸出result的初始化字符串404。後來我才知道原來stoi()可以把string型直接強制轉換成int型。

AC代碼:

#include <bits/stdc++.h>  using namespace std;    bool isPrime(int n)   //判斷素數  {      if(n < 2)      {          return false;      }      for(int i = 2; i <= sqrt(n); i++)      {          if(n%i == 0)          {              return false;          }      }      return true;  }    int main()  {      int L,K;      string N;      cin >> L >> K >> N;      string result = "404";      for (int i = 0; i <= L-K; i++)      {          string tempstr = N.substr(i,K);          int temp = stoi(tempstr);  //string型的數字強制轉換成int型的數字          if(isPrime(temp))  //若這個數字是素數,則用result來記錄它          {              result = tempstr;              break;          }      }      cout << result << endl;      return 0;  }