1. 程式人生 > >1152 Google Recruitment (20 分)(c++實現 已AC)

1152 Google Recruitment (20 分)(c++實現 已AC)

思路

題目的大意很簡單, 在L長度的數字字串中找到第一個k長度的素數. 如果找不到哦啊返回404, 找到了返回這個k長度的字串.
一個簡單暴力的思路就是遍歷L長度, 檢查從這個字元起往後k長度的字串表示的數字是否是素數.

測試點:

// 樣例測試點
20 5
23654987725541023819

// 樣例測試點
10 3
2468024680

// 當L 小於k時, 返回`404`
5 6
00523 // 404

// k長度的字串包含前導0時, 輸出的時候要包含前導0, 測試點3
5 2
00021 // 02

**其他問題 ** k < 10 但是還是可能超過int的表示範圍, 所以採用long int更保險, 在pta判題系統裡, long int和int都是32bit, 只有long long int是64bit, 故採用long long

程式碼

#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
char seq[1005];
int n, k;
bool isprime(ll n) {
	if (n < 2) return false;
	if (n == 2) return true;
	for (ll i = 2;i <= (int)sqrt((double)n); i++) {
		if
(n % i == 0) return false; } return true; } ll stoint(char *s, int k) { char* p = s; ll sum = 0; while (k--) { sum = sum * 10 +(*p - '0'); p++; } return sum; } int main() { scanf("%d%d", &n, &k); scanf("%s", seq); ll temp; bool flag = false; for (int i = 0; i <= n-k &&
!flag; i++){ temp = stoint(seq + i, k); if (isprime(temp)) flag = true; } if (flag) printf("%.*d", k, temp); else printf("404"); return 0; }

總結

審題還是不夠仔細, 如果能夠看到這句話to find the 4-digit prime in 200236, 0023 is a solution的話, 應該就能想到前導零的問題, 2分就這樣丟了.