NYOJ 题目975 关于521

来源:互联网 发布:斯蒂文斯理工学院知乎 编辑:程序博客网 时间:2024/05/29 15:11

关于521

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

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

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

输入
多组测试数据:
一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。
输出
一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。
样例输入
200 500300 9001 600
样例输出
Case 1:2 0Case 2:2 1Case 3:6 1
这道题,b[0]一直不是0,明明赋值给0了啊。。。。。
运用大表,否则会超时。
#include <stdio.h>#include <string.h>int a[1000000],b[1000000];/*void swap(int* n,int* m){    int* t;    t=n;    n=m;    m=t;}*/int youdian(int m){    int ok1=0,ok2=0,ok3=0;    while(m)    {        if(m%10==1)            ok1=1;        else if(m%10==2)            ok2=1;        else if(m%10==5)            ok3=1;        m/=10;    }    if(ok1==1&&ok2==1&&ok3==1)        return 1;    return 0;}int lianxu(int m){    char s[10];    int i,ok=0;   for(i=0;i<=10;i++)        s[i]='\0';    sprintf(s,"%d",m);    for(i=0;s[i]!='\0';i++)    {      if(s[i]=='5'&&s[i+1]=='2'&&s[i+2]=='1')            ok=1;    }    if(ok) return 1;    return 0;}int main (void){   // freopen("题目975.txt","r",stdin);    int i,n,m,number=1;   memset(a,0,sizeof(a));   memset(b,0,sizeof(b));   a[0]=0;    for(i=124;i<=1000000;i++)    {        if(youdian(i))           {                a[i]=a[i-1]+1;                if(lianxu(i))                    b[i]=b[i-1]+1;                    else                        b[i]=b[i-1];           }        else            {                a[i]=a[i-1];                b[i]=b[i-1];            }    }     b[0]=0;   // for(i=0;i<=10;i++)     //   printf("%d\n",b[i]); //  printf("%d\n",b[0]);    while(scanf("%d%d",&n,&m)!=EOF)    {       /* if(n>m)        {            swap(&n,&m);        }*/        printf("Case %d:%d %d\n",number++,a[m]-a[n-1],b[m]-b[n-1]);    }    return 0;}


0 0
原创粉丝点击