POJ 3286 How many 0′s? / 2282 The Counting Problem 排列組合統計數字

來源:互聯網
上載者:User

比如算4123中有多少個2

 

按位統計,,,先算各位,,個位是2的情況有413種,,,因為各位左邊可以0~412,,,而右邊沒有數字,,,

然後是十位,,,十位是2的有41*10 + 1*4種,,當左邊從0~40時,,,右邊可以從0~9,,,而左邊為41時,,右邊只能從0~3

然後是百位,,,,百位有4*100種,,,,即左邊從0~3,,右邊從0~99

千位有  1*1000,,,左邊沒有數字,,,右邊0~999,,,,

上面是計算1~9,,,,計算0的時候比較特殊,,,,原因是除了0這一個數字之外,,,,0不能做開頭,,,

可以看到在求1~9的個數的時候,,,都是分為2部分相乘,,,這樣0的處理也很簡單,,只需把相乘的左半部分-1,,,,

 

 

POJ 3286 題意:輸入m,n,求[m,n]之間的所有數中0出現的次數。

#include<cstdio>#include<algorithm>using namespace std;#define lint __int64lint b[12] = { 1, 10, 100, 1000, 10000, 100000, 1000000,10000000, 100000000, 1000000000, 10000000000, 100000000000 };lint count ( lint n ){    lint left, m, sum = 0;    for ( int i = 1; i < 12; i++ )    {        left = n / b[i] - 1;        sum += left * b[i-1];        m = (n % b[i] - n % b[i-1]) / b[i-1]; //求出從第到高的第i位上的具體數字        if ( m > 0 ) sum += b[i-1];        else if ( m == 0 ) sum += n % b[i-1] + 1;        if ( n < b[i] ) break;    }    return sum;}int main(){    lint m, n;    while ( scanf("%I64d%I64d",&m,&n) && (n>=0) )        printf("%I64d\n",count(n)-count(m-1));    return 0;}

 

POJ 2282 題意:輸入m,n,求[m,n]之間的所有數中0,1,2,3,4,5,6,7,8,9出現的次數。

#include<cstdio>#include<algorithm>using namespace std;#define lint __int64int b[9] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };lint count ( int n, int id ){    lint left, m, sum = 0;    for ( int i = 1; i < 9; i++ )    {        left = n / b[i] - (id==0);        sum += left * b[i-1];        m = (n % b[i] - n % b[i-1]) / b[i-1]; //求出從第到高的第i位上的具體數字        if ( m > id ) sum += b[i-1];        else if ( m == id ) sum += n % b[i-1] + 1;        if ( n < b[i] ) break;    }    return sum;}int main(){    int x, y;    while ( scanf("%d%d",&x,&y) && (x||y) )    {        if ( x > y ) swap(x,y);        for ( int i = 0; i <= 9; i++ )            printf("%I64d ",count(y,i)-count(x-1,i));        printf("\n");    }    return 0;}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.