PAT 甲級 1152 Google Recruitment (20分)

暴躁的小茬發表於2021-01-02

題目地址

Google Recruitment (20分)

題目大意

給出一串數字和我們需要得到的數字位數,判斷這個串中是否有指定長的質數存在,存在輸出這個子串,不存在輸出404

解題思路

  • 需要一個將string型的子串變為數字的功能函式。
  • 需要一個判斷給定數是否為質數的功能函式。
  • 也可以採用先生成質數hash在判斷的方式。

完整程式碼

// A1152.cpp : Defines the entry point for the console application.
//
#include "stdio.h"
#include "string"
#include "iostream"
using namespace std;

string haha,ans = "404";

int n,k;

int prime(int n){
	for(int i = 2;i*i <= n;i++){
		if(n % i == 0) return 0;
	}
	return 1;
}

int toNum(string a){
	int sum = 0,dd = 1;
	for(int i = a.size()-1;i >= 0;i--){
		sum += dd*(a[i] - '0');
		dd = dd*10;
	}
	return sum;
}

void jub(){
	for(int i = 0;i <= haha.size() - k;i++)
		if(prime(toNum(haha.substr(i,k)))){
			ans = haha.substr(i,k);
			break;
		}
}

int main(int argc, char* argv[])
{
	scanf("%d%d",&n,&k);
	cin>>haha;
	jub();
    if(n >= k)
    	cout<<ans<<endl;
    else
        cout<<"404"<<endl;
	//printf("Hello World!\n");
	return 0;
}

總結

20分的題相對容易,考察質數和string串操作。

  • 歡迎評論區交流討論。

相關文章