本文共 1378 字,大约阅读时间需要 4 分钟。
2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。
本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。
输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。
在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。
20 523654987725541023819
49877
10 32468024680
404
思路:注意前导零也被包含进去!!!这个题毫无疑问我们要自定义一个函数用于判断是否是素数,输入的数字以字符串型输入,方便判断,输入之后用一个for循环,结束条件是i<=l-k,也就是我们从i=0开始,每次截取一段长为k的子串,再用sscanf将该串转换成数字,最后判断这个数字是否是素数,若是则输出它并且直接结束,若不是则继续截取下一段子串,最后循环正常退出,说明没有素数,则输出404。
#include#include #include #include using namespace std;bool judge(int n){ //判断是否是素数 if(n==1||n==0) return false; for(int i=2;i<=sqrt(1.0*n);i++) if(n%i==0) return false; return true;}int main(){ string number; int l,k,n; cin >>l>>k; cin >>number; for(int i=0;i<=l-k;i++){ string s=number.substr(i,k); //截取 sscanf(s.c_str(),"%d",&n); //转数字 if(judge(n)){ //判断 cout <
转载地址:http://cor.baihongyu.com/