poj2282The Counting Problem(组合)

链接

计算0-9每一个数字出现的次数 逐位进行处理 对于每一位取几时依次算下组合的情况 注意0的情况需要特殊处理一下 因为0000 00 这样都是等于0的 前面的几位是多余的

 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<stdlib.h>

 6 #include<vector>

 7 #include<cmath>

 8 #include<queue>

 9 #include<set>

10 using namespace std;

11 #define N 100000

12 #define LL long long

13 #define INF 0xfffffff

14 const double eps = 1e-8;

15 const double pi = acos(-1.0);

16 const double inf = ~0u>>2;

17 int d[12],dd[12];

18 int an[12];

19 void judge(int xx,int x[],int f)

20 {

21     if(!xx) return ;

22     int i,j,e;

23     int p[12],g=0;

24     int y = xx;

25     while(xx)

26     {

27         p[++g] = xx%10;

28         xx/=10;

29     }

30     int o = 1;

31     x[0]+=1;

32     for(i = g ; i >= 1 ; i--)

33     {

34         for(i==g?j = 1:j=0 ; j < p[i] ; j++)

35         {

36             x[j]+=pow(10.0,g-o);

37         }

38         for(j = i-1 ; j>=1 ; j--)

39         {

40             int ko;

41             if(i==g)

42             {

43                 if(j==i-1)

44                 ko = pow(10.0,g-o-1)*(p[i]-1);

45                 else

46                 ko = pow(10.0,g-o-1)*(p[i]-1)+(pow(10.0,(i-j-1))-1)*pow(10.0,j-1);

47             }

48             else ko = pow(10.0,g-o-1)*p[i];

49             //cout<<ko<<" "<<i<<" "<<j<<" "<<o<<endl;

50             x[0]+=ko;

51             for(e = 1 ; e <= 9 ; e++)

52             {

53                 x[e]+=pow(10.0,g-o-1)*p[i];

54             }

55         }

56         int k = pow(10.0,g-o);

57         x[p[i]] += y%k+1;

58         o++;

59     }

60 

61     if(f)

62     {

63         for(i = 1 ;i <= g ;i++)

64         x[p[i]]--;

65     }

66 }

67 int main()

68 {

69     int i,a,b;

70     while(cin>>a>>b)

71     {

72         if(!a&&!b) break;

73         if(a>b) swap(a,b);

74         memset(d,0,sizeof(d));

75         memset(dd,0,sizeof(dd));

76         judge(a,d,1);

77         judge(b,dd,0);

78         for(i = 0 ;i < 9 ;i++)

79         cout<<dd[i]-d[i]<<" ";

80         cout<<dd[9]-d[9]<<endl;

81     }

82     return 0;

83 }
View Code

 

你可能感兴趣的:(count)