fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(){
  6. int PORTAS [] = {0, 0, 0}; // 0 - a porta contém uma cabra; 1 - a porta contém o carro
  7. int CAR, ESC, NUM, DECISAO, AUX;
  8. float VIT, DER;
  9. int ESTAT [] = {0, 0, 0}; // {Tentativas, vitórias, derrotas}
  10. int repeticoes;
  11.  
  12. printf("1 para trocar todas, 0 para manter todas: ");
  13. scanf ("%d", &DECISAO);
  14. printf ("Digite o número de repetições: "); // Recomendável 10, 100 ou 1000.
  15. scanf ("%d", &repeticoes);
  16. NUM = repeticoes;
  17. do{
  18. PORTAS[0] = PORTAS[1] = PORTAS[2] = 0;
  19. CAR = rand () %3; // Randomiza a porta que recebe o carro.
  20. PORTAS [CAR] = 1;
  21.  
  22. ESC = rand () %3; // Randomiza a escolha da porta.
  23.  
  24. if ( DECISAO == 1 ){ // Se foi escolhido trocar todas as vezes.
  25. if ( PORTAS [ESC] == 1 ){ // Porta escolhida contém o carro.
  26. for ( AUX = 0; AUX < 3 ; AUX++ ){
  27. if ( PORTAS [AUX] != 1 && AUX != ESC ){
  28. ESC = AUX; //Mudança de porta
  29. AUX = 3; // Para quebrar o 'For'
  30. ESTAT [2] += 1;
  31. }
  32. }
  33. }
  34.  
  35. else if ( PORTAS [ESC] == 0){ //Porta escolhida contém uma cabra.
  36. ESC = CAR; // Pois sendo a porta errada, e tendo a outra errada sido revelada, só sobrou a correta.
  37. ESTAT [1] += 1;
  38. }
  39. }
  40.  
  41. if ( DECISAO == 0){ //Caso tenha sido escolhido manter todas as vezes.
  42. if ( ESC == CAR ){
  43. ESTAT [1] += 1;
  44. }
  45. else{
  46. ESTAT [2] += 1;
  47. }
  48. }
  49.  
  50. NUM--;
  51. ESTAT [0] += 1;
  52. } while ( NUM > 0);
  53.  
  54. VIT = ( 1.0f*ESTAT[1] / repeticoes ) * 100; // Porcentagem de vitórias *ERRO*
  55. DER = ( 1.0f*ESTAT[2] / repeticoes ) * 100; // Porcentagem de derrotas *ERRO*
  56.  
  57. ( DECISAO == 1 ) ? printf ("\n\n\n\tTrocando de porta todas as vezes: \n\n") : printf ("\n\n\n\tMantendo a porta todas as vezes: \n\n");
  58. printf ("Número de tentativas: %d\n", ESTAT [0]);
  59. printf ("Número de vitórias: %d, %f%% do total.\n", ESTAT [1], VIT);
  60. printf ("Número de derrotas: %d, %f%% do total.", ESTAT [2], DER);
  61. return 0;
  62. }
Success #stdin #stdout 0s 2160KB
stdin
1
1000
stdout
1 para trocar todas, 0 para manter todas: Digite o número de repetições: 


	Trocando de porta todas as vezes: 

Número de tentativas: 1000
Número de vitórias: 646, 64.599998% do total.
Número de derrotas: 354, 35.400002% do total.