Pagini recente » Cod sursa (job #2660840) | Cod sursa (job #2442085) | Cod sursa (job #1467573) | Cod sursa (job #2968348) | Cod sursa (job #1174944)
using namespace std;
#include <fstream>
#include <iomanip>
ifstream fin("cifre.in");
ofstream fout("cifre.out");
int nrn=0, c, k;
int a[12], b[12], nr[12];
int cmp(int*, int*) ;
void bkt(int) ;
void afiseaza() ;
int main()
{
int a1, b1, a2, b2;
fin>>a1>>b1>>c>>k; a2=a1; b2=b1;
while(a1) a[++a[0]]=a1%10, a1/=10;
while(b1) b[++b[0]]=b1%10, b1/=10;
bkt(1);
fout<<setprecision(4)<<1.0*nrn/(b2-a2+1);
return 0;
}
int cmp(int v1[], int v2[])
{ //1 daca v1<v2 ; -1 daca v1>v2
if(v1[0]<v2[0]) return 1;
if(v1[0]>v2[0]) return -1;
for(int i=v1[0]; i>=1; --i)
{
if(v1[i]<v2[i]) return 1;
if(v1[i]>v2[i]) return -1;
}
return 0;
}
void bkt(int nrc)
{ //pozitiile de la 1 la nrc-1 sunt ocupate
afiseaza();
if(nrc<=b[0])
{
int i;
for(i=0; i<=9; ++i)
{
nr[nrc]=i;
nr[0]++;
bkt(nrc+1);
nr[nr[0]]=0;
nr[0]--;
}
}
}
void afiseaza()
{
if(nr[nr[0]]==0) return;
if(cmp(a, nr)==-1) return;
if(cmp(nr, b)==-1) return;
int i, cf=0;
for(i=1; i<=nr[0]; ++i)
if(nr[i]==c) cf++;
if(cf>=k)
{
nrn++;
/*for(i=nr[0]; i>=1; --i)
fout<<nr[i];
fout<<'\n';*/
}
}