南阳理工---题目975关于521

关于521

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述

Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。

浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如12356就算一个,而5111就不算。特别的,如果他看到了521三个数连续出现,会特别的愤怒。例如35210。

输入
多组测试数据:

一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。

输出
一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。
样例输入
200 500
300 900
1 600
样例输出
Case 1:2 0
Case 2:2 1
Case 3:6 1
来源
流年
上传者
ACM_安鹏程

分析:直接求解是超时超时的代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
    char a[100];
    int n,m;
    int k=1;
    while(cin>>n>>m)
    {
        int t1=0;
        int t2=0;
        int b1,b2,b3;
        for(int i=n;i<=m;i++)
        {
             b1=0;b2=0;b3=0;
          sprintf(a,"%d",i);         //将整数i转化为字符串
          int len=strlen(a);
          for(int i=0;i<len;i++)
          {
              if(a[i]=='5'&&a[i+1]=='2'&&a[i+2]=='1')
                  {
                    t2++;
                    break;
                  }
                if(a[i]=='5')
                    b1=1;
                if(a[i]=='2')
                    b2=1;
                if(a[i]=='1')
                    b3=1;
                if(b1&&b2&&b3)
                {
                    t1++;
                    break;
                }

          }
        }
        printf("Case %d:",k++);
        printf("%d %d\n",t1+t2,t2);

    }
    return 0;
}

正确的代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct dot
{
    int t1;
    int t2;
};
dot a[1000050];
int main()
{
    int n,m;
    int k=1;
    int t1=0,t2=0;
    memset(a,0,sizeof(a));
    for(int i=100;i<1000000;i++)
    {
        if((i%10==1||i/10%10==1||i/100%10==1||i/1000%10==1||i/1000%10==1||i/10000%10==1||i/100000==1)
               &&(i%10==2||i/10%10==2||i/100%10==2||i/1000%10==2||i/1000%10==2||i/10000%10==2||i/100000==2)
               &&(i%10==5||i/10%10==5||i/100%10==5||i/1000%10==5||i/1000%10==5||i/10000%10==5||i/100000==5))
                t1++;
            if(i%1000==521||i/10%1000==521||i/100%1000==521||i/1000==521)
                t2++;
                a[i].t1=t1;
                a[i].t2=t2;
    }
    while(cin>>n>>m)
    {
        printf("Case %d:%d %d\n",k++,(a[m].t1-a[n-1].t1),(a[m].t2-a[n-1].t2));
    }
    return 0;
}
时间: 2024-08-04 19:56:09

南阳理工---题目975关于521的相关文章

南阳理工 题目9:posters(离散化+线段树)

posters 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally deci

(c++实现)南阳理工 题目325 zb的生日

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

(c++实现)南阳理工acm 题目117 求逆序数

求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出它的逆序数是多少. 比如 1 3 2 的逆序数就是1. 输入 第一行输入一个整数T表示测试数据的组数(1<=T<=5) 每组测试数据的每一行是一个整数N表示数列中共有N个元素(2〈=N〈=1000000) 随后的一行共有N个整

南阳理工另一种阶乘问题

#include<stdio.h>int main(){  int n,m;  int sum,i;  int a[21];  int t=1,t1=1;  for(i=1;i<21;i=i+2)  {   a[i]=t*t1;   a[i+1]=a[i];   t=t1*t;   t1=t1+2;  }  scanf("%d",&n);  while(n--)  {   sum=0;   scanf("%d",&m);   for

南阳理工acm 1

C++版: #include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b<<endl; } 南阳理工acm 1,布布扣,bubuko.com

南阳理工--韩信点兵

#include<stdio.h>int main(){  int a,b,c;  int x;  scanf("%d%d%d",&a,&b,&c);  for(x=10;x<=100;x++)  {   if(x%3==a&&x%5==b&&x%7==c)   {    printf("%d\n",x);    break;   }  }  if(x>100)  {   printf(

南阳理工----奋斗的小蜗牛

#include<stdio.h>#include<math.h>int main(){  int t,h;  int n;  double n1;  scanf("%d",&t);  while(t--)  {   n=0;    scanf("%d",&h);    if(h<=10)    printf("%d\n",n+1);   if(h>10)    {  n1=(h-10)/5.0

南阳理工ACM975--关于521

http://acm.nyist.net/JudgeOnline/problem.php?pid=975 这是我的源码.一直超时,一直超时. 还有itoa函数函数的使用.可以改成sprintf(str, " %d" , num); 但是杭电的ACM complier不接受itoa函数,原因是itoa是c++的扩展函数,当然不能指望任何编译器都可以编译了~~ 注: 课件内容: itoa不是ansi函数, 能将整数转换为字符串而且与ANSI标准兼容的方法是使用sprintf()函数 int

南阳理工 oj 题目739 笨蛋难题四

笨蛋难题四 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 这些日子笨蛋一直研究股票,经过调研,终于发现xxx公司股票规律,更可喜的是 笨蛋推算出这家公司每天的股价,为了防止别人发现他的秘密.他决定对于这家公司的 股票最多买一次,现在笨蛋已经将股票价格列了出来.(这已经不是笨蛋的难题了,他已经解决 呵 呵).只想难为难为你呀,从股票价格表上,你能算出笨蛋的每股股票最多能赚多少钱吗? 输入 第一行一个n,表示n天(小于100000)第二行 给出n天每股的价格 输出 每