求解:潜伏

大神们求助啊!!!

E  潜伏

 

Time Limit:1000MS  Memory Limit:65535K

题型: 编程题   语言: 无限制

描述

终于,OYY从队友提供的名单中找到了心仪的MM.
但是,他担心MM不喜欢他,于是他利用自己强大的编程能力写了一个潜伏软件,监控MM的网络访问记录,以查看MM是否有在网络上查询自己。

现在OYY得到了MM的网络记录,但是他太紧张了,而写不出一个程序去查找,于是他需要你的帮忙。

MM的聊天记录长度为N(1 <= N <= 100000),全部由数字构成,而OYY需要多次查询在该记录的第i位后出现的第一个两位素数。

 

输入格式

第一行,一个全部由数字构成的字符串,长度小于100000。 
第二行,一个整数M(1 <= M <= 100000),表示OYY查询的次数。
第3 … M+2行,每行一个数字Pi(Pi保证不会超过给出字符串的长度且大于零),请求出Pi后一个出现的两位素数。

输出格式

每个询问一行,输出题目要求的素数,如果不存在输出“-1”。

输入样例

123185154231234984181212132123
6
3
5
8
13
21
30

输出样例

31
23
23
23
13
-1

Provider

a470086609 from SCAU

 

 

我错的地方是不知道怎么把字符串中的数字转换成整型,然后不知道怎么结束找到符合条件的素数之后的结束。

个人代码:

#include <stdio.h>
#include <math.h>
#include <string.h>
char s[100005];
int prime(int n)
{
    int j,k;
    k = sqrt(1.0*n);
    for(j=2; j<k; j++)
    {
        if(n%j == 0) return 0;
    }
    return 1;
}
int two(int m)
{
    if(m>=10) return 1;
    else return 0;
}
int main()
{
    int m,i,j,len;
    int k,k1,k2;
    while(gets(s))
    {
        len = strlen(s);
        scanf("%d",&m);
        while(m--)
        {
            scanf("%d",&i);
            for(j=i-1; j<len; j++)
            {
                k1 = (int)s[j];
                k2 = (int)s[j+1];
                k = 10*s[j]+s[j+1];
		//printf("%d,%d,%d\n\n",k1, k2, k);

                if(prime(k) && two(k))
                {
                    printf("%d\n",k);
                    //这里不知道怎么结束单次输出
                }
            }
            printf("-1\n");

        }
    }
    return 0;
}

 

求解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值