zoukankan      html  css  js  c++  java
  • 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

    有重复计算类型的题目要注意优化,不然会超时的哦~

     1 #include<stdio.h>
     2 int s1[1000000],s2[1000000];
     3 void fun(int a, int b)
     4 {
     5     int i,ii;
     6     bool t1,t2,t3,t4;
     7     s1[0] = s2[0] = s1[1] = s2[1] = 0;
     8     for(i=a; i <= b; i++){
     9         ii = i;
    10         t1 = t2 = t3 = t4 =false;
    11         while(ii != 0 ){
    12             int a = ii %10;
    13             if( a == 5)
    14             {
    15                 t1 = true;
    16             }
    17             else if( a == 2)
    18             {
    19                 t2 = true;
    20             }
    21             else if( a == 1)
    22             {
    23                 t3 = true;
    24             }
    25             ii = ii / 10;
    26         }
    27         if(t1 && t2 && t3){
    28             s1[i-1] = s1[i-2] + 1;
    29             ii = i;
    30         while(ii != 0 ){
    31             int a = ii % 10;
    32             int b = (ii / 10) % 10;
    33             int c = (ii / 100) % 10;
    34             if( c > 0 && a == 1 && b == 2 && c ==5)
    35                 t4 = true;
    36             ii = ii / 10;
    37         }
    38         if(t4)
    39             s2[i-1] = s2[i-2] + 1;
    40         else 
    41             s2[i-1] = s2[i-2];
    42         }
    43         else{
    44             s2[i-1] = s2[i-2];
    45             s1[i-1] = s1[i-2];
    46         }
    47     }
    48 }
    49 
    50 int main()
    51 {
    52     int a,b,i=1;
    53     fun(2,1000000);
    54     while(scanf("%d%d",&a,&b) != EOF){
    55         if(a == 1)
    56             printf("Case %d:%d %d
    ",i,s1[b-1]-s1[a-1],s2[b-1]-s2[a-1]);
    57         else
    58             printf("Case %d:%d %d
    ",i,s1[b-1]-s1[a-2],s2[b-1]-s2[a-2]);
    59         i++;
    60     }
    61     return 0;
    62 }

    learning....

  • 相关阅读:
    Java中Vector和ArrayList的区别
    Java深拷贝与浅拷贝
    Java基础数据类型转换
    Java中的break Label 和continue Label
    java中关于Integer 和java 中方法参数传递
    网络虚拟化
    备份工具
    mysql文件理解
    mysql分区介绍
    进程间通信
  • 原文地址:https://www.cnblogs.com/george-cw/p/3833602.html
Copyright © 2011-2022 走看看