polska Posted June 20, 2012 at 10:59 AM Report Share #464332 Posted June 20, 2012 at 10:59 AM (edited) Boas pessoal, estive a fazer o programa Greedy Gift Givers da USACO e ao submeter, diz-me que falhou num caso de teste, o que eu acho estranho, é o meu output estar igual ao deles... E deu incorrecto.. Run 1: Execution error: Your program did not produce an answer that was judged as correct. The program stopped at 0.000 seconds; it used 3336 KB of memory. Here are the respective outputs: ----- our output --------- mitnik_2923 Poulsen_557 Tanner_128 Stallman_-311 Ritchie_-1777 Baran_245 Spafford_-1997 Farmer_440 Venema_391 Linus_-599 ---- your output --------- mitnik 2923 Poulsen 557 Tanner 128 Stallman -311 Ritchie -1777 Baran 245 Spafford -1997 Farmer 440 Venema 391 Linus -599 -------------------------- ------ Data for Run 1 ------ 10 mitnik Poulsen Tanner Stallman Ritchie Baran Spafford Farmer Venema Linus mitnik 300 3 Poulsen Tanner Baran Poulsen 1000 1 Tanner Spafford 2000 9 mitnik Poulsen Tanner Stallman Ritchie Baran Farmer Venema Linus Tanner ... [and more] ... ---------------------------- Eu fui ao visual studio verficar se dava algum erro ou se o output dava realmente mal mas não, correu sempre bem... Alguém me consegue ajudar? Meu cód: #include <stdio.h> #include <string.h> struct problema { char nome[14+1]; int dinheiro; }; struct problema pessoas[10]; int main(){ FILE *in=fopen("gift1.in","r"),*out=fopen("gift1.out","w"); int numero_pessoas,numero_receivers,dinheiro,resto,posGiver; char giver[14+1],receiver[14+1]; /* receber numero de pessoas */ fscanf(in,"%d",&numero_pessoas); /* receber nomes das pessoas e colocar na struct */ for(int i=0;i<numero_pessoas;i++){ fscanf(in,"%s",pessoas[i].nome); pessoas[i].dinheiro=0; //colocar todo o valor de dinheiro a 0 } /* receber nome dos givers(doadores),a sua quantia de dinheiro e o numero de pessoas que iram receber o dinheiro */ for(int i=0;i<numero_pessoas;i++){ fscanf(in,"%s",giver); fscanf(in,"%d %d",&dinheiro,&numero_receivers); if(numero_receivers!=0){ //se o valor for 0 não existem receivers /* receber nome dos receivers */ for(int j=0;j<numero_receivers;j++){ fscanf(in,"%s",receiver); /* pesquisa receiver e giver e guarda a posição do giver para atualizar depois o dinheiro */ for(int i=0;i<numero_pessoas;i++){ if(strcmp(pessoas[i].nome,receiver)==0) pessoas[i].dinheiro+=dinheiro/numero_receivers; //atualiza dinheiro receiver if(strcmp(pessoas[i].nome,giver)==0) posGiver=i; //guarda posição do giver } } /* actualiza dinheiro do giver */ resto=(dinheiro/numero_receivers)*numero_receivers; //como é divisão inteira, pode sobrar algum dinheiro, que fica com o giver resto=dinheiro-resto; dinheiro-=resto; pessoas[posGiver].dinheiro-=dinheiro; } } fclose(in); /* mostra dinheiro de cada pessoa */ for(int i=0;i<numero_pessoas;i++){ fprintf(out,"%s\n%d\n",pessoas[i].nome,pessoas[i].dinheiro); } fclose(out); return 0; } Edited June 20, 2012 at 11:00 AM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
Flinger Posted June 20, 2012 at 11:04 AM Report Share #464334 Posted June 20, 2012 at 11:04 AM (edited) Ele deve comparar o texto do output. Como o teu tem os \n entre os nomes e os valores, é considerado diferente... presumo eu Põe o printf assim: fprintf(out,"%s_%d\n",pessoas[i].nome,pessoas[i].dinheiro); Edited June 20, 2012 at 11:04 AM by Flinger Link to comment Share on other sites More sharing options...
polska Posted June 20, 2012 at 11:05 AM Author Report Share #464335 Posted June 20, 2012 at 11:05 AM (edited) Ele deve comparar o texto do output. Como o teu tem os \n entre os nomes e os valores, é considerado diferente... presumo eu Põe o printf assim: fprintf(out,"%s_%d\n",pessoas[i].nome,pessoas[i].dinheiro); Eu já tinha tentado isso, mas não funcionou, dá exactamente a mesma coisa que pus la em cima. EDIT : Já resolvi, realmente o erro era no texto de output, não devia levar um '_' mas sim um espaço.. Foi erro meu que pensava que era \n xD... Tópico resolvido Edited June 20, 2012 at 11:11 AM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
Flinger Posted June 20, 2012 at 11:11 AM Report Share #464336 Posted June 20, 2012 at 11:11 AM Os resultados parecem correctos. Só se for mesmo alguma questão relacionada com formatações (End of line ou qq coisa do género) Sem ver o enunciado, não posso dizer mais nada. Link to comment Share on other sites More sharing options...
polska Posted June 20, 2012 at 11:14 AM Author Report Share #464337 Posted June 20, 2012 at 11:14 AM Os resultados parecem correctos. Só se for mesmo alguma questão relacionada com formatações (End of line ou qq coisa do género) Sem ver o enunciado, não posso dizer mais nada. Já esta resolvido 👍 , eu editei a menssagem a que te respondi.. Obrigado Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now