1 2 3 4

PAT乙级1094-----谷歌的招聘 (20分)

1094 谷歌的招聘 (20分)

输入格式:

输入在第一行给出 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

思路:
1.用辗转相除法或者直接取余判断是否是素数
2.测试点2和测试点5同时不过就是少了个等于(看代码)

首次通过代码:
 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main(){
 5    int a,b;
 6    char c[1003];
 7    scanf("%d %d",&a,&b);
 8    if(a<b) {
 9        printf("404");
10        return 0;
11    }
12    getchar();
13    gets(c);
14    for(int i=0;i<=a-b;i++){//这里要有=号
15        double x=0;int flag=1;
16        for(int j=0;j<b;j++){
17            x=x*10+(c[i+j]-'0');
18        }
19        long long y=x;
20        if(y!=1){
21        if(y==2){
22            for(int j=0;j<b;j++)
23            printf("%c",c[i+j]);
24             return 0;
25        }
26        else {
27        for(int j=2;j<=(int)sqrt(x);j++){
28           if(y%j==0){
29             flag=0;break;
30         }
31        }
32        if(flag){
33            for(int j=0;j<b;j++)
34            printf("%c",c[i+j]);
35             return 0;
36        }
37        }
38        }
39    }
40    printf("404");
41    return 0;
42 }
View Code

参考:

FROM:https://blog.csdn.net/qq_44781344/article/details/104129390
posted @ 2020-03-03 17:54  Qianren  阅读(272)  评论(0编辑  收藏  举报