fork(2) 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. CAR = rand () %3; // Randomiza a porta que recebe o carro.
  19. PORTAS [CAR] = 1;
  20.  
  21. ESC = rand () %3; // Randomiza a escolha da porta.
  22.  
  23. if ( DECISAO == 1 ){ // Se foi escolhido trocar todas as vezes.
  24. if ( PORTAS [ESC] == 1 ){ // Porta escolhida contém o carro.
  25. for ( AUX = 0; AUX < 3 ; AUX++ ){
  26. if ( PORTAS [AUX] != 1 && AUX != ESC ){
  27. ESC = AUX; //Mudança de porta
  28. AUX = 3; // Para quebrar o 'For'
  29. ESTAT [2] += 1;
  30. }
  31. }
  32. }
  33.  
  34. if ( PORTAS [ESC] == 0){ //Porta escolhida contém uma cabra.
  35. ESC = CAR; // Pois sendo a porta errada, e tendo a outra errada sido revelada, só sobrou a correta.
  36. ESTAT [1] += 1;
  37. }
  38. }
  39.  
  40. if ( DECISAO == 0){ //Caso tenha sido escolhido manter todas as vezes.
  41. if ( ESC == CAR ){
  42. ESTAT [1] += 1;
  43. }
  44. else{
  45. ESTAT [2] += 1;
  46. }
  47. }
  48.  
  49. NUM--;
  50. ESTAT [0] += 1;
  51. } while ( NUM > 0);
  52.  
  53. VIT = ( ESTAT[2] / repeticoes ) * 100; // Porcentagem de vitórias *ERRO*
  54. DER = ( ESTAT[3] / repeticoes ) * 100; // Porcentagem de derrotas *ERRO*
  55.  
  56. ( 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");
  57. printf ("Número de tentativas: %d\n", ESTAT [0]);
  58. printf ("Número de vitórias: %d, %f%% do total.\n", ESTAT [1], VIT);
  59. printf ("Número de derrotas: %d, %f%% do total.", ESTAT [2], DER);
  60. return 0;
  61. }
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: 2, 0.000000% do total.
Número de derrotas: 2, 0.000000% do total.