1152 Google Recruitment (20 分)(c++實現 已AC)
阿新 • • 發佈:2018-12-10
思路
題目的大意很簡單, 在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分就這樣丟了.