Solução: Alien Numbers - Codejam (Daniel Rodrigues, Fernando Nunes e Luis Bernardo)
From AdonaiMedrado.Pro.Br
Revision as of 02:14, 4 June 2009 by Adonaimedrado (Talk | contribs) (New page: <code lang="c"> # include <stdio.h> # include <string.h> int potencia(int x, int y){ int pot=1; for (int i=0;i<y;i++) pot *= x; return pot; } int position(char letter,char ...)
# include <stdio.h> # include <string.h> int potencia(int x, int y){ int pot=1; for (int i=0;i<y;i++) pot *= x; return pot; } int position(char letter,char language[]){ char *pont; pont = strchr(language, letter) ; if (pont) return (pont-language); else return (-1); } int convertAlienSystemToDecimal(char alienNumber[],char languageSource[]){ int lenghtOfNumber = strlen(alienNumber); int lenghtOfLanguage = strlen(languageSource); int pos; int decimal=0; char letter; for (int i=0;i<lenghtOfNumber;i++){ letter = alienNumber[i]; pos = position(letter,languageSource); decimal += pos*(potencia(lenghtOfLanguage,(lenghtOfNumber-1-i))); } return decimal; } void convertDecimalToAlienSystem(int decimal,char languageTarget[],int numberTarget[],int *l){ int lenght = strlen(languageTarget); int quociente=decimal; int resto; char res[2]; int i=0; while(quociente){ resto = decimal%lenght; numberTarget[i] = resto; quociente = decimal/lenght; decimal = quociente; i++; } *l = i; } void imprimeResultado(int numberTarget[],char languageTarget[],int lenghtNumber){ for (int k=lenghtNumber-1;k>=0;k--) printf("%c",languageTarget[numberTarget[k]]); printf("\n"); } int main(){ int N; int numberTarget[1000]; char alienNumber[94]; char languageTarget[94]; char languageSource[94]; scanf("%d",&N); for (int i=1;i<=N;i++){ scanf("%s",&alienNumber); scanf("%s",&languageSource); scanf("%s",&languageTarget); int decimal = convertAlienSystemToDecimal(alienNumber,languageSource); int lenghtNumber; convertDecimalToAlienSystem(decimal,languageTarget,numberTarget,&lenghtNumber); printf("Case #%d: ",i); imprimeResultado(numberTarget,languageTarget,lenghtNumber); } return (0); }