Cod sursa(job #123141)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 14 ianuarie 2008 20:13:29
Problema Cifra Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <stdio.h>
#include <string.h>
int v[105]={0};
void ultci()
{
int i,j,b;
	for (i=1;i<=100;i++)
		{
		b=i%10;
		switch (b)
			{
			case 0:v[i]=v[i-1];break;
			case 1:v[i]=v[i-1]+1;break;
			case 2:
			      {	if (i%4==0) v[i]=(v[i-1]+6)%10;
				if (i%4==1) v[i]=(v[i-1]+2)%10;
				if (i%4==2) v[i]=(v[i-1]+4)%10;
				if (i%4==3) v[i]=(v[i-1]+8)%10;break; }
			case 3:
			      {	if (i%4==0) v[i]=(v[i-1]+1)%10;
				if (i%4==1) v[i]=(v[i-1]+3)%10;
				if (i%4==2) v[i]=(v[i-1]+9)%10;
				if (i%4==3) v[i]=(v[i-1]+7)%10;break; }
			case 4:
			     { 	if (i%2==0) v[i]=(v[i-1]+6)%10;
				if (i%2==1) v[i]=(v[i-1]+4)%10;break;  }
			case 5: v[i]=(v[i-1]+5)%10;break;
			case 6: v[i]=(v[i-1]+6)%10;break;
			case 7:
			      {	if (i%4==0) v[i]=(v[i-1]+1)%10;
				if (i%4==1) v[i]=(v[i-1]+7)%10;
				if (i%4==2) v[i]=(v[i-1]+9)%10;
				if (i%4==3) v[i]=(v[i-1]+3)%10;break;}
			case 8:
			     {	if (i%4==0) v[i]=(v[i-1]+6)%10;
				if (i%4==1) v[i]=(v[i-1]+8)%10;
				if (i%4==2) v[i]=(v[i-1]+4)%10;
				if (i%4==3) v[i]=(v[i-1]+2)%10;break;  }
			case 9:
			     {	if (i%2==0) v[i]=(v[i-1]+1)%10;
				if (i%2==1) v[i]=(v[i-1]+9)%10;break;  }
			}
		}
}

int main()
{ int i,t,n,x,y,z;
  char a[120];
FILE*f=fopen("cifra.in","r");
FILE*g=fopen("cifra.out","w");
ultci();
fscanf(f,"%d",&t);
for (i=1;i<=t;i++)
	{
	fscanf(f,"%s\n",a);
	n=strlen(a);
	if (n>1)
		{
		x=(int)(10*(a[n-2]-'0')+(a[n-1]-'0'));
		fprintf(g,"%d",v[x]);
		}
	else
		{
		x=(int)(a[n-1]-'0');
		fprintf(g,"%d",v[x]);
		}
	fprintf(g,"\n");
	for (z=0;z<105;z++) a[z]='\0';
}
return 0;
}