Cod sursa(job #25061)

Utilizator razvan2006razvan brezulianu razvan2006 Data 4 martie 2007 10:20:55
Problema Puteri Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.3 kb
/*
ID: rbrezul2
LANG: C++
PROG: crypt1
*/
#include<stdio.h>
#include<math.h>

long i, j, n, a[11], n1, n2, nc, ok, cifun2, cifzn2, np1, np2, rez, nc1, nc2, ncrez, k;
FILE *fin, *fout;

int verifica(long x)
{
	nc = log10(x) + 1;
	long cifr;

	for(i = 1; i <= nc; i++)
	{
		ok = 1;
		cifr = x % 10;
		for(j = 1; j <= n; j++)
			if(cifr == a[j])
				ok = 0;
		x /= 10;
		if(ok == 1)
			return 1;
	}

	return 0;
}

int main()
{
	fin = fopen("crypt1.in", "rt");
	fout = fopen("crypt1.out", "wt");

	fscanf(fin, "%ld", &n);

	for(i = 1; i <= n; i++)
		fscanf(fin, "%ld", &a[i]);

	for(n1 = 111; n1 <= 999; n1++)
	{
		for(n2 = 11; n2 <= 99; n2++)
		{
			if(verifica(n2) == 0 && verifica(n1) == 0)
			{
				cifun2 = n2 % 10;
				cifzn2 = n2 / 10;
				np1 = cifun2 * n1;
				np2 = cifzn2 * n1;
				rez = n1 * n2;
				nc1 = log10(np1) + 1;
				nc2 = log10(np2) + 1;
				ncrez = log10(rez) + 1;
				if(verifica(np1) == 0 && verifica(np2) == 0 && nc1 == 3 && nc2 == 3 && verifica(rez) == 0 && ncrez == 4) 
				{
					k++;		
				/*	printf(" %ld*\n", n1);
					printf("  %ld\n", n2);
					printf("----\n");
					printf(" %ld\n", np1);
					printf("%ld\n", np2);
					printf("----\n");
					printf("%ld\n", rez);*/
				}
			}
		}
	}

	fprintf(fout, "%ld\n", k);

	return 0;
}