Pagini recente » Cod sursa (job #1425914) | Cod sursa (job #2751251) | Cod sursa (job #811033) | Cod sursa (job #554987) | Cod sursa (job #1466066)
#include <cstdio>
#include <algorithm>
using namespace std;
int d[15][15];
int a[15];
int c;
int sum_up(int nr, int k)
{
int n = 0;
do
{
a[n++] = nr%10;
nr/=10;
}
while(nr);
int nrc = 0;
for(int i=0; i<n; i++)
if(a[i] == c)
nrc++;
int ans = 0;
for(int i=n-1; i>=0; i--)
{
int sum = 0, sum2 = 0;
for(int j=max(0, k); j<=i; j++)
sum += d[i][j];
for(int j=max(0, k-1); j<=i; j++)
sum2 += d[i][j];
if(a[i]-1 >= c)ans = ans + (a[i]-1)*sum + sum2;
else ans = ans + a[i]*sum;
if(a[i] == c)k--;
}
if(nrc >= k)ans++;
return ans;
}
int main()
{
freopen("cifre.in", "r", stdin);
freopen("cifre.out", "w", stdout);
int a, b, k;
scanf("%d%d%d%d", &a, &b, &c, &k);
d[0][0] = 1;
for(int i=1; i<10; i++)
for(int j=0; j<=i; j++)
{
if(c)d[i][j] = 9 * d[i-1][j] + d[i-1][j-1];
else d[i][j] = 9 * d[i-1][j] + d[i-1][j-1];
}
int ans = sum_up(b, k)-sum_up(a-1, k);
//printf("%d", ans);
printf("%lf", 1.0*ans/(b-a+1));
return 0;
}