| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 613 人关注过本帖
标题:做了好久,做不出来 ACM 的题目,求大神指教,
只看楼主 加入收藏
qq471402415
Rank: 2
等 级:论坛游民
帖 子:88
专家分:45
注 册:2013-12-3
结帖率:82.35%
收藏
已结贴  问题点数:20 回复次数:2 
做了好久,做不出来 ACM 的题目,求大神指教,
Description终于,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    

[ 本帖最后由 qq471402415 于 2014-12-6 21:33 编辑 ]
搜索更多相关主题的帖子: 字符串 聊天记录 监控 能力 
2014-12-06 21:25
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:10 
#define  N  100
#define  M  100// 听说c99中数组长度可以用动态定义,那么就可以把这行去掉、并将所有的M改为m
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

int prime(int x);
int main()
{
    char str[N]={"123185154231234984181212132123"};//如果你不嫌输入麻烦可以用下面注释中的gets/scanf/for语句
    int  m=6 ,i,j,flag;  // flag作为出错或者无查询结果的判断标识
    int  num[M]={3,5,8,13,21,30},result[M][N]={0};
    //gets(str);
    //scanf("%d",&m);
    //for(i=0;i<m;i++)
    //    scanf("%d",&num[i]);
    for(i=0;i<m;i++)
    {
     flag=1;
     if(num[i]>=strlen(str))
        flag=0;   
     else
    for(j=num[i]-1;j<N;j++)
    {    result[i][j]=(str[j]-'0')*10+(str[j+1]-'0'); //取出两位数,存入result数组
        if (prime(result[i][j]))
        {
             printf("%d\n",result[i][j]);
             break;
         }
        else if(j==N-1)
                flag=0;
    }
    if(flag==0)  //出错或未找到素数,输出-1
        printf("-1\n");
    }
    return 0;
}

int prime(int x) //判断x是否素数,是返回1,否返回0
{
    int i,r=1;
    for(i=2;i<=sqrt(x);i++)
      if(x%i!=0)
         continue;
      else  r=0;
    return r;
}

[ 本帖最后由 comewest 于 2014-12-9 12:25 编辑 ]
2014-12-09 12:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
程序代码:
#include <stdio.h>

int main()
{
    char str[100000];
    scanf( "%s", str );
    unsigned m;
    scanf( "%u", &m );
    for( unsigned i=0; i!=m; ++i )
    {
        unsigned s;
        scanf( "%u", &s );

        int prime = -1;
        for( const char* p=str+s-1; *p && *(p+1); ++p )
        {
            unsigned v = (*p-'0')*10 + (*(p+1)-'0');
            if( (v==2 || v==3 || v==5 || v==7) || (v!=1 && v%2!=0 && v%3!=0 && v%5!=0 && v%7!=0) )
            {
                prime = v;
                break;
            }
        }

        printf( "%d\n", prime );
    }

    return 0;
}
2014-12-09 12:49
快速回复:做了好久,做不出来 ACM 的题目,求大神指教,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017931 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved