Cod sursa(job #398421)

Utilizator stef2503Stefan Stan stef2503 Data 18 februarie 2010 17:47:18
Problema Cifre Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>

int cif (int a, int b, int c, int k) 
{
	int i, x, n, s=0;
	for (i=a; i<=b; i++) {
		x=i;
		n=0;
		while (x>0) {
			if (x%10==c) {
				n++;
			}
			x/=10;
			if (n>=k) {
				s++;
				break;
			}
		}
	}
	return s;	
}

int cif2 (int a, int c) {
	int x;
	bool b=false;
	x=a/10000;
	while (x>0) {
		if (x%10==c) {
			b=true;
			break;
		}
		x/=10;
	}
	if (b) {
		return 1;
	} else {
		return 0;
	}
}

int main ()
{
	freopen("cifre.in", "r", stdin);
	freopen("cifre.out", "w", stdout);
	int a, b, c, k, i, x, y, m, n, s=0, st=0;
	scanf("%d %d %d %d", &a, &b, &c, &k);
	if (b-a<10000) {
		s=cif(a, b, c, k);
	} else {
		x=10000;
		y=1000000000;
		while (x<a) {
			x+=10000;
		}
		while(y>b) {
			y-=10000;
		}
		s=cif(a, x, c, k);
		s+=cif(y, b, c, k);
		for (i=x; i<y; i+=10000) {
			if (st==0 && cif2(i, c)==0) {
				st=cif(i, i+9999, c, k);
				s+=st;
			} else if (cif2(i, c)!=0) {
				s+=cif(i, i+9999, c, k);
			} else {
				s+=st;
			}
		}
	}
	float p = (float) s / (float) (b-a+1);
	printf("%.4lf", p);
	return 0;
}