亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

統計個數

系統 1655 0

題目簡述:給兩個數字a和b,求a和b之間的所有數中k出現的次數總和。比如1和11之間,1出現的次數為4(1,10,11共4個1)。

?

輸入:若干組數據,每行三個整數,a,b,k。以0 0結尾。(0<a,b<100 000 000,0<=k<=9)

輸出:輸出k出現的次數總和。

?

解題思路:分治策略。可以分別考慮從0到a和b的這些數中,k出現的次數和,再做減法。 以197和k=1為例,先考慮190~197這8個數,個位1出現一次;其他數位上百位有1個1,8個數一共1*8個1。0~189這些數中,個位1出現19次。再之后,就不需要考慮個位上的1了,value可以安心*10了。如果是0的話,要特殊處理。(因為十位為0的000和個位為0的000是一種情況,而十位為1的010和個位為1的001是兩種情況。)value*10后,就開始考慮十位上的1了。這個時候,考慮的數是100~189。一直下去......

代碼:

        
           1
        
         #include <iostream>


        
           2
        
         #include <fstream>


        
           3
        
         #include <cstdio>


        
           4
        
        
          using
        
        
          namespace
        
        
           std;


        
        
           5
        
        
           6
        
        
          #define
        
         ll long long


        
           7
        
        
           8
        
        
          ll value,ans;


        
        
           9
        
        
          int
        
        
           k;


        
        
          10
        
        
          11
        
         inline 
        
          void
        
         Swap(
        
          int
        
         &a,
        
          int
        
         &
        
          b);


        
        
          12
        
        
          void
        
         Deal(
        
          int
        
        
           n);


        
        
          13
        
        
          14
        
        
          int
        
        
           main(){


        
        
          15
        
        
          //
        
        
          freopen("D:\\input.in","r",stdin);
        
        
          16
        
        
          int
        
        
           a,b;


        
        
          17
        
        
          while
        
        (scanf(
        
          "
        
        
          %d %d %d
        
        
          "
        
        ,&a,&b,&
        
          k),a){


        
        
          18
        
        
          if
        
        (a==
        
          b){


        
        
          19
        
                     ans=
        
          0
        
        
          ;


        
        
          20
        
        
          while
        
        
          (a){


        
        
          21
        
                         value=a%
        
          10
        
        
          ;


        
        
          22
        
        
          if
        
        (value==k)    ans++
        
          ;


        
        
          23
        
                         a/=
        
          10
        
        
          ;


        
        
          24
        
        
                      }


        
        
          25
        
                 }
        
          else
        
        
          {


        
        
          26
        
        
          if
        
        (a<
        
          b) Swap(a,b);


        
        
          27
        
                     ans=
        
          0
        
        
          ;


        
        
          28
        
                     value=
        
          1
        
        
          ;


        
        
          29
        
        
                      Deal(a);


        
        
          30
        
                     value=-
        
          1
        
        ;
        
          //
        
        
          Deal(a)-Deal(b)
        
        
          31
        
                     Deal(b-
        
          1
        
        
          );


        
        
          32
        
        
                  }


        
        
          33
        
                 printf(
        
          "
        
        
          %lld\n
        
        
          "
        
        
          ,ans);


        
        
          34
        
        
              }


        
        
          35
        
        
          return
        
        
          0
        
        
          ;


        
        
          36
        
        
          }


        
        
          37
        
         inline 
        
          void
        
         Swap(
        
          int
        
         &a,
        
          int
        
         &
        
          b){


        
        
          38
        
        
          int
        
         t=
        
          a;


        
        
          39
        
             a=
        
          b;


        
        
          40
        
             b=
        
          t;


        
        
          41
        
        
          }


        
        
          42
        
        
          void
        
         Deal(
        
          int
        
        
           n){


        
        
          43
        
        
          if
        
        (n<=
        
          0
        
        )    
        
          return
        
        
          ;


        
        
          44
        
        
          int
        
        
           one,ten,tmp;


        
        
          45
        
             one=n%
        
          10
        
        
          ;


        
        
          46
        
             n/=
        
          10
        
        
          ;


        
        
          47
        
             ten=
        
          n;


        
        
          48
        
        
          if
        
        (one>=k)  ans+=value;
        
          //
        
        
          先看個位
        
        
          49
        
        
          while
        
        (ten){            
        
          //
        
        
          十位以上的每個數對應one+1個個位數變化
        
        
          50
        
                 tmp=ten%
        
          10
        
        
          ;


        
        
          51
        
        
          if
        
        (tmp==k)  ans+=value*(one+
        
          1
        
        
          );


        
        
          52
        
                 ten/=
        
          10
        
        
          ;


        
        
          53
        
        
              }


        
        
          54
        
             ans+=value*n;
        
          //
        
        
          比如197,考慮十位以上0~18.
        
        
          55
        
        
          if
        
        (k==
        
          0
        
        )    ans-=value;
        
          //
        
        
          將第一位是0的情況排除
        
        
          56
        
             value*=
        
          10
        
        ;             
        
          //
        
        
          變權
        
        
          57
        
             Deal(n-
        
          1
        
        
          );


        
        
          58
        
         }
      
View Code

?

統計個數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色综合天天综合高清网国产 | 伊人伊人伊人伊人 | 91久久夜色精品国产九色 | 黄色高清在线观看 | 青草在线视频 | 亚洲欧美日韩中文字幕在线一 | 好吊色妞| 日本无翼乌全彩无遮挡动漫 | 久久综合亚洲 | 久久久久久天天夜夜天天 | 亚洲久久久久 | 99精品国产成人a∨免费看 | 看片亚洲 | 欧美日韩综合在线视频免费看 | 在线 中文字幕 日韩 欧美 | 亚洲酒色1314狠狠做 | 国产欧美日韩精品一区二区三区 | 九九99九九精彩网站 | 色综合久久综合 | 国产在线精品一区免费香蕉 | 香蕉成人在线视频 | 在线亚洲日产一区二区 | 久久久久伊人 | 欧美不卡在线观看 | 成人久久伊人精品伊人 | 免费观看欧美精品成人毛片 | 成人黄色一级毛片 | 国产欧美中文字幕 | 黄色在线观看免费 | 国产成人亚洲欧美三区综合 | 国产成人啪精品视频免费网 | 国产成人亚洲日本精品 | 国产永久免费高清动作片www | 日韩精品一区二三区中文 | 久久精品女人毛片国产 | 欧美 日韩 中字 国产 | 国内精品自在自线在免费 | 亚洲欧美另类国产 | 第一福利影院 | 久久精品综合免费观看 | 欧美毛片又粗又长又大 |