Моя симуляция не запускается и не зацикливается - PullRequest
0 голосов
/ 13 мая 2018

Я должен ответить на следующий вопрос:

В стране Паззлвании Аарон, Боб и Чарли поссорились о том, какой из них был величайшей загадкой всех времен. Чтобы раз и навсегда закончить спор, они договорились о дуэли до смерти. Аарон - плохой стрелок и поражает свою цель только с вероятностью 1/3. Боб немного лучше и поражает свою цель с вероятностью 1/2. Чарли является опытным стрелком и никогда не пропускает. Попадание означает убийство, и попадание человека выпадает из дуэли. Чтобы компенсировать неравенство в их навыках стрельбы, решено, что участники будут стрелять по очереди, начиная с Аарона, затем Боба, а затем Чарли. Цикл повторялся до тех пор, пока не стоял один человек. И этот человек запомнился бы как величайший головоломник всех времен.

В настоящее время у меня есть следующий код:

int puzzle_count = 0;                                   
double aaron_accuracy = 1.0 / 3.0;
double bob_accuracy = 1.0 / 2.0;
double charlie_accuracy = 1.0;
bool aaron_alive;
bool bob_alive;
bool charlie_alive;
double random;
double aaronwins = 0;
double bobwins = 0;
double charliewins = 0;
double aaron_percent = 0;
double bob_percent = 0;
double charlie_percent = 0;

printf("\n Who is the greatest puzzler of all time?");
while (puzzle_count < 10000) {
    aaron_alive = true;
    bob_alive = true;
    charlie_alive = true;
    while (((aaron_alive = true) && (bob_alive = true)) || 
        ((bob_alive = true) && (charlie_alive = true)) || 
        ((aaron_alive = true) && (charlie_alive = true))) {

        if (aaron_alive = true) {
            if (charlie_alive = true) {
                random = rand() % 100;
                if (random < aaron_accuracy * 100) {
                    charlie_alive = false;
                        if (random > aaron_accuracy * 100) {
                            charlie_alive = true;
                        }
                }
            }
            if (charlie_alive = false) {
                random = rand() % 100;
                if (random < aaron_accuracy * 100) {
                    bob_alive = false;
                        if (random > aaron_accuracy * 100) {
                            bob_alive = true;
                        }
                }
            }
        }
        if (bob_alive = true) {
            if (charlie_alive = true) {
                random = rand() % 100;
                if (random < bob_accuracy * 100) {
                    charlie_alive = false;
                        if (random > bob_accuracy * 100) {
                            charlie_alive = true;
                        }
                }
            }
            if (charlie_alive = false) {
                random = rand() % 100;
                if (random < bob_accuracy * 100) {
                    aaron_alive = false;
                        if (random > bob_accuracy * 100) {
                            aaron_alive = true;
                        }
                }
            }
        }
        if (charlie_alive = true) {
            if (bob_alive = true) {
                random = rand() % 100;
                if (random < charlie_accuracy * 100) {
                    bob_alive = false;
                        if (random > charlie_accuracy * 100) {
                            bob_alive = true;
                        }
                }
            }
            if (bob_alive = false) {
                random = rand() % 100;
                if (random < charlie_accuracy * 100) {
                    aaron_alive = false;
                        if (random > charlie_accuracy * 100) {
                            aaron_alive = true;
                        }
                }
            }
        }


        if (aaron_alive = true)
            aaronwins++;
        if (bob_alive = true)
            bobwins++;
        if (charlie_alive = true)
            charliewins++;

    }
    puzzle_count++;
}

if (aaronwins + bobwins + charliewins == 10000) {
    aaron_percent = aaronwins / 10000;
    bob_percent = bobwins / 10000;
    charlie_percent = charliewins / 10000;

    printf("\n  Aaron won %f/10000 or %.2f% of the time", aaronwins, aaron_percent);
    printf("\n  Bob won %f/10000 or %.2f% of the time", bobwins, bob_percent);
    printf("\n  Charlie won %f/10000 or %.2f% of the time", charliewins, charlie_percent);
}
return 0;

}

Когда я запускаю код, он не возвращает ошибок или предупреждений и открывается, но не запускает симуляцию. Я прочитал код несколько раз и не могу найти причину этой проблемы.

Заранее извиняюсь, если это из-за опечатки. Это первый курс программирования, который я изучаю, и мои навыки написания кода и устранения неполадок не самые лучшие.

1 Ответ

0 голосов
/ 13 мая 2018

Здесь

while (((aaron_alive = true) && (bob_alive = true)) || 
    ((bob_alive = true) && (charlie_alive = true)) || 
    ((aaron_alive = true) && (charlie_alive = true)))

это

aaron_alive = true

на 1-м месте - это задание.Таким образом, аргумент для while всегда будет верным.

Вы, вероятно, хотите

while (((aaron_alive == true) && (bob_alive == true)) || 
    ((bob_alive == true) && (charlie_alive == true)) || 
    ((aaron_alive == true) && (charlie_alive == true)))

или даже более просто:

while ((aaron_alive && bob_alive) || 
       (bob_alive && charlie_alive) || 
       (aaron_alive && charlie_alive))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...