谷歌的招聘(C语言实现)

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 的前导零。

#include 
#include 

int isprime(int num){
    int i, ret = 1;
    
    if (num <= 1){
        ret = 0;
    }
    for (i=2; num>2&&i<=sqrt(num); i++){
        if (num % i == 0){
            ret = 0;
            break;
        }
    }
    
    return ret;
}

int main(){
    int l, k, i, j, sum, num;
    int flag = 0, pos = 0;
    
    scanf("%d%d", &l, &k); //输入数据
    getchar(); //读走换行符
    char str[l];
//     gets(str); //会发生错误
//     scanf("%s", str);
    for (i=0; i<l; i++){
       str[i] = getchar();
    }
    
//     printf("hey\n");
//     for (i=0; i
//          printf("%c", str[i]);
//     }
    
    for (i=k-1; i<l; i++){ //处理数据
        num = str[i] - '0';
//         if (num%2==0 || num%5==0){ //不可以这样判断
//             continue; //因为2和5都是素数
//         }
        sum = 0;
        for (j=i-k+1; j<=i; j++){ //计算由k位数字组成的值
            sum = sum * 10 + (str[j] - '0');
        }
        if (isprime(sum) == 1){ //判断是否是素数
            flag = 1;
            pos = i;
            break;
        }
    }
    
    if (flag == 1){ //输出数据
        for (i=pos-k+1; i<=pos; i++){
            printf("%d", str[i] - '0');
        }
//         printf("%d", sum);
    }
    else{
        printf("404");
    }
    
    return 0;
}

你可能感兴趣的:(c语言)