C ++ 为学校解决问题,在比赛中奔跑三匹马,谁获得第一名就是赢家。这三匹马应该像这样
1|--------H------|
2|-------H-------|
3|---------H-----|
但是我的代码正确运行了程序(生成1到100之间的随机数,如果该数字小于50,则将马匹向上移动1个空格)。但它先跑第一匹马,然后跑第二匹和第三匹。
试图对此进行查找,但是似乎没有一种方法有效(使用C ++代码块(最新版本的Windows 10)。
srand(time(NULL));
Horse1();
Horse2();
Horse3();
Github文件:https://gist.github.com/EthanA2020/f16a699f1b8136a1da0350ab48acdda0
答案 0 :(得分:2)
我认为您的问题不是函数类型,而是程序的结构。无论您如何编程,一个操作都必须先进行下一个操作。开发人员通过并排运行对象的每个操作(在您的情况下为马运动)并稍后检查结果来进行处理。
例如,让我们使用您的骑乘场景:
while "all horses" are less than "finish"
horse 1 moves
horse 2 moves
horse 3 moves
我确定您熟悉循环,因此我们将在这里使用它。必须存在一些设定的距离才能确定一匹马何时完成。因此,当所有马匹的距离小于该值时,您将要继续循环。在每个循环中,每匹马的运动值都必须改变或不改变(由您的随机运动函数确定)。
现在,当while循环结束时,您可以确定至少有一匹马越过了终点线。所有操作均已完成,并且您拥有马匹位置数据集。在这一点上,您可以查看哪些马匹已经完成(我说的是马匹复数,因为有可能一匹以上甚至三匹马同时完成,因此请务必在最后考虑这一点)。
这样,您的程序结构应类似于:
while "all horses" are less than "finish"
horse 1 moves
horse 2 moves
horse 3 moves
//movement of horses complete
check and print the horses with a movement value of "finish"
答案 1 :(得分:-4)
我认为您应该这样做:
while (!horse(rand() % 100)) {
usleep(100);
}
horse(int n)
将马n
移动1的位置,如果到达终点,它将返回true
(以结束比赛)。如果将无效的n
(只有1到3有效)传递给它,则不会执行任何操作。