1. 程式人生 > 實用技巧 >PAT甲級1152Google Recruitment

PAT甲級1152Google Recruitment

題目連結

https://pintia.cn/problem-sets/994805342720868352/problems/1071785055080476672

題解

涉及到的英語知識

  • recruitment

    招聘

  • the first 10-digit prime found in consecutive digits of the natural constant e

    由自然常數e的連續數字中的第一個10位素數

  • prime

    素數

  • consecutive

    連續的,連貫的

  • transcendental number

    超越數:在數論中,超越數是指任何一個不是代數數的無理數。只要它不是任何一個有理係數代數方程的根,它即是超越數。最著名的超越數是e以及π。

思路、程式碼以及注意點

  • 題目要求
    • 題目給出L位的數字N,要求求出其中第一個K位的素數,如果不存在則輸出404
    • 提示:開頭的0也算是素數的一部分,比如0002應和2等價
  • 思路
    • 遍歷字串並取子串,判斷它是否為素數,找到第一個素數即可,找不到的話就輸出404
  • 注意點
    • 如果找到了第一個素數,則輸出結果時要輸出字串,方便處理0002這種情況
    • 找不到第一個素數,以字串或者數字形式輸出404都可以
// Problem: PAT Advanced 1152
// URL: https://pintia.cn/problem-sets/994805342720868352/problems/1071785055080476672
// Tags: String Prime

#include <iostream>
#include <string>
using namespace std;

bool isPrime(int num);

int main()
{
    // 題目給出L位的數字N,要求求出其中第一個K位的素數,如果不存在則輸出404
    // 提示:開頭的0也算是素數的一部分,比如0002應和2等價
    int L, K;  // 數字位數,所求素數位數
    string N;  // 數字
    cin >> L >> K >> N;
    for (int i = 0; i <= L - K; i++){
        string str = N.substr(i, K);
        if (isPrime(stoi(str))){
            cout << str << endl;
            return 0;
        }
    }
    cout << 404 << endl;
    return 0;
}

bool isPrime(int num){
    if (num<=1)
        return false;
    for (int i = 2; i * i <= num; i++)
        if (num % i == 0)
            return false;
    return true;
}

作者:@臭鹹魚

轉載請註明出處:https://www.cnblogs.com/chouxianyu/

歡迎討論和交流!