C++L1-7谷歌的招聘
C++編寫L1-7 谷歌的招聘 (20分)
2004 年 7 月,谷歌在矽谷的 101 號公路邊豎立了一塊巨大的廣告牌(如下圖)用於招聘。內容超級簡單,就是一個以 .com 結尾的網址,而前面的網址是一個 10 位素數,這個素數是自然常數 e 中最早出現的 10 位連續數字。能找出這個素數的人,就可以通過訪問谷歌的這個網站進入招聘流程的下一步。
自然常數 e 是一個著名的超越數,前面若干位寫出來是這樣的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921… 其中粗體標出的 10 位數就是答案。
本題要求你程式設計解決一個更通用的問題:從任一給定的長度為 L 的數字中,找出最早出現的 K 位連續數字所組成的素數。
輸入格式:
輸入在第一行給出 2 個正整數,分別是 L(不超過 1000 的正整數,為數字長度)和 K(小於 10 的正整數)。接下來一行給出一個長度為 L 的正整數 N。
輸出格式:
在一行中輸出 N 中最早出現的 K 位連續數字所組成的素數。如果這樣的素數不存在,則輸出 404。注意,原始數字中的前導零也計算在位數之內。例如在 200236 中找 4 位素數,0023 算是解;但第一位 2 不能被當成 0002 輸出,因為在原始數字中不存在這個 2 的前導零。
輸入樣例 1:
20 5
23654987725541023819
輸出樣例 1:
49877
輸入樣例 2:
10 3
2468024680
輸出樣例 2:
404
這個問題中最難的一處是如何將一個字串轉換成一個數字,最開始我考慮到可以使用迴圈將字串的每一個字元剝離出來,然後*10+s[i],於是就有了下面的程式碼。
#include <bits/stdc++.h>
using namespace std;
int isZhengshu(string s2)
{//剝離字串,將字串轉換為數字
int sum = 0;
for(int i = 0;i <s2.size();i++)
{
sum = sum*10+(s2[i]-'0');
}
return sum;
}
bool isSushu(int num)
{//判斷這個數字是不是素數
if(num == 0||num == 1)//若該數為0或1,則直接返回錯誤
return false;
int m = sqrt(num);//將該數開2次根可以使迴圈變少
for(int i = 2;i < m;i++)
{
if(num%i==0)//若該數存在除1和本身以外的解則說明該數不是素數
return false;
}
return true;
}
int main()
{
int l, k, num = 0, flag = 0;
cin >> l >> k;
string s1, s2;
cin >> s1;
for(int i = 0; i< (l-k+1); i++)
{//判斷到l-k+1就到達最後一次
s2 = s1.substr(i,k);//substr擷取從i開始k個字元長度的字串
num = isZhengshu(s2);//將字串轉化為數字
if(isSushu(num))
{
flag = 1;
break;
}
}
if(flag == 1)
{
cout << s2 <<endl;
}
else
cout << "404" <<endl;
return 0;
}
後來通過查詢C++11的標準,發現有一些函式可以直接實現數字與字串的相互轉換,連結如下:
C/C++中字串與數字轉換
我使用到的是stoi函式,於是就有了下面這個程式碼
#include <bits/stdc++.h>
using namespace std;
bool isSushu(int num)
{
if(num == 0||num == 1)
return false;
int m = sqrt(num);
for(int i = 2;i < m;i++)
{
if(num%i==0)
return false;
}
return true;
}
int main()
{
int l, k, num = 0, flag = 0;
cin >> l >> k;
string s1, s2;
cin >> s1;
for(int i = 0; i< (l-k+1); i++)
{
s2 = s1.substr(i,k);
num = stoi(s2);
if(isSushu(num))
{
flag = 1;
break;
}
}
if(flag == 1)
{
cout << s2 <<endl;
}
else
cout << "404" <<endl;
return 0;
}
不過在使用stoi函式時出現了一個小問題,因為codeblocks不支援C++11的特性,所以在使用時需要將環境進行調整,如圖所示
相關文章
- PAT 乙級 1094 谷歌的招聘 (20分)---【素數 字串】谷歌字串
- Google前招聘官:獲得蘋果、谷歌或微軟工作的10個建議Go蘋果谷歌微軟軟工
- 谷歌智慧城市計劃發力:招聘新團隊欲打造未來城市谷歌
- 谷歌招聘花樣百出 “創業公司競爭最大”是共識谷歌創業
- 谷歌無人駕駛汽車專案招聘製造及營銷人才 已接近量產?谷歌
- It的招聘需求來啦
- 校園招聘的思考
- 【招聘】杭州有贊招聘 MySQL DBAMySql
- 【招聘】大型外資招聘Senior Oracle ExpertOracle
- 2022招聘季|從招聘方的角度理解求職求職
- Python求解谷歌高速公路招聘廣告:{ 無理數e中前十位連續的素數 }.comPython谷歌
- IT招聘資訊
- 華為IT招聘
- Google複雜的招聘流程Go
- 谷歌的黑客夢之隊谷歌黑客
- 最近招聘的一些思考
- 招聘一個靠譜的iOSiOS
- 招聘程式設計師的方法程式設計師
- 中興通訊在招聘的全集
- 新加坡IT公司招聘
- 解密谷歌帝國的投資部門:谷歌資本解密谷歌
- 招聘招聘:歡迎各位猿長期到日本工作
- 招聘招聘:長期有坑與大家分享和交流!
- 簡單的招聘資訊圖表分析
- Google招聘優秀人才的祕訣Go
- 前端招聘與前端賣身的困境前端
- 谷歌的績效管理谷歌
- 招聘管理系統
- 迅雷前端招聘啦前端
- 招聘java程式TJava
- *招聘*java講師Java
- 【招聘】阿里雲-rds 資料庫開發團隊招聘阿里資料庫
- 趣文:如果像招聘程式設計師那樣招聘木匠程式設計師
- 招聘類app開發的功能需求分析APP
- 招聘開發者常見的九大誤區
- 創業團隊的招聘與留人創業團隊
- Jobvine:圖解Google複雜的招聘流程圖解Go
- 現在的測開招聘真逆天