标签:1094 输出 招聘 正整数 数字 谷歌 样例 素数 include
自然常数 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
第一次16分,少了个判断范围,还是细节问题,素数判断就不用说了,找个模板记下来就行了,用不到素数表,素数筛。
这题也是 可以用stoi函数来转化字符串再进一步判断,也可以麻烦一点,我怕考试的机子的版本太低所以用的麻烦一点的。这题的关键就是范围的判断。
你从都到尾一个一个判断:
1.你可以 i+k-1<l 即i<l-k+1 我个人觉得这种好理解点
2.你可以i+k<=l 即i<=l-k
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
bool is_prime(int n){
if(n <2 || n>2 && n%2==0) return false;
for(int i=3;i*i<=n;i+=2)
if(n%i==0){
return false;
}
return true;
}
int main(){
string s,bk;
int l,k,flag=0;
cin>>l>>k>>s;
for(int i=0;i<l-k+1;i++){
string t=s.substr(i,k);
int d=0;
for(int j=0;j<t.length();j++){
d=d*10+t[j]-'0';
}
if(is_prime(d)){
cout<<t;
return 0;
}
}
cout<<"404";
return 0;
}
标签:1094,输出,招聘,正整数,数字,谷歌,样例,素数,include 来源: https://blog.csdn.net/weixin_44270812/article/details/87915569
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。