999
0 189 1 300 2 300 3 300 4 300 5 300 6 300 7 300 8 300 9 300
呵呵,n的值给的够大,一部天书啊!
#include<stdio.h>long a[10]={0};void deal(long n){ a[n%10]++; n=n/10; while(n) { a[n%10]++; n=n/10; }}long pow1(int n){ long k=1; while(n) { k=k*10; n--; } return k;}int sort(int n){ int t=0; long m=1; while(n/m) { t++; m=m*10; } return t;}void main(){ long n,i,j,k=11; long b[9][10]; scanf("%d",&n); b[0][0]=0,b[1][0]=9; for(i=2;i<9;i++) { b[i][0]=i*pow1(i)-k; k=k*10+1; } for(i=0;i<9;i++) b[i][1]=(i+1)*pow1(i); for(i=0;i<9;i++) for(j=2;j<10;j++) b[i][j]=b[i][1]; k=0; if((n+1)%10==0) { for(i=0;i<10;i++) printf("%d %d\n",i,b[sort(n)-1][i]); } else if(n<9) { printf("0 0\n"); for(i=1;i<10;i++) if(i<n)printf("%d 1\n",i); else printf("%d 0\n",i); } else { long x,y,zx,wy; k=sort(n); x=pow1(k-1)-1; y=pow1(k)-1; zx=n-x; wy=y-n; if(zx>wy) { for(i=n+1;i<=y;i++) deal(i); for(i=0;i<10;i++) printf("%d %d\n",i,b[k-1][i]-a[i]); } else { for(i=x+1;i<=n;i++) deal(i); for(i=0;i<10;i++) printf("%d %d\n",i,b[k-2][i]+a[i]); } }}