赞
踩
按特定的比赛规则进行龟兔赛跑!
比赛选手(乌龟Tortoise和兔子Hare)将从N+1个方格中的“方格0"开始比赛,每一个方格代表比赛路线上的一个可能位置,终点是“方格N”。到达或通过终点的第一个选手将被奖励一桶新鲜的胡萝卜和莴苣。比赛线沿着一个湿滑的山坡盘旋而上,所以选手可能会失足滑倒。
现在有一个每秒响一下的时钟,每当时钟响一下,程序就按照图1中的规则调整这两个动物选手的位置。
图1 乌龟和兔子位置调整规则
使用变量来记录这两个动物的位置(即位置数在 0~N 之间取值)。每个动物都从位置1(即起跑线)出发。若动物滑到方格0的左侧,将被重新放回方格 0。通过产生一个取值范围是1≤i≤10的随机整数i来实现图 1 中的百分比。对于乌龟,当1≤i≤5,“快速爬行”;当 6≤i≤7,“滑倒”;当 8≤i≤10,“缓慢爬行”。采用相同的技术来移动兔子。
开始比赛时,打印下列文字:比赛开始!
然后,时钟每响一下(即循环的每一次重复),打印一条具有 N+1 个格的线段(在乌龟的位置上显示字符T,在兔子的位置上显示字符 H。
在每条线都打印好后,测试是否有动物到达或者通过方格 N。若有,则打印出胜利者,终止比赛模拟。打印胜利的一方。
void init(char grids[][GRIDS])//GRIDS赛道长度(格子数量)
{
for (int ani = 0; ani < ANIMALS; ani++)
{
for (int grid = 0; grid < GRIDS; grid++)
{
grids[ani][grid] = ' ';
}
}
}
void print(char grids[][GRIDS]) { for (int ani = 0; ani < ANIMALS; ani++) { for (int grid = 0; grid < GRIDS; grid++) { printf("+-"); } printf("+\n"); for (int grid = 0; grid < GRIDS; grid++) { if (grid == 0) { grids[ani][grid] = ani % 2 == 0 ? 'T' : 'H'; printf(" %c", grids[ani][grid]); //grids[ani][grid] = ' '; //printf(" %c", grids[ani][grid]); } else { printf("|%c", grids[ani][grid]); //grids[ani][grid] = ' '; //printf("|%c", grids[ani][grid]); } } printf("|\n"); } for (int grid = 0; grid < GRIDS; grid++) { printf("+-"); } printf("+\n"); }
void Tortorise(char grids[][GRIDS],int *pstep_tor) { int x = rand() % 10 + 1; if ((x >= 1) && (x <= 5)) { *pstep_tor += 3; } else if ((x == 6) || (x = 7)) { *pstep_tor -= 6; } else { *pstep_tor += 1; } if (*pstep_tor <= 0) { *pstep_tor = 0; } if (*pstep_tor >= GRIDS - 1) { *pstep_tor = GRIDS - 1; } grids[0][*pstep_tor] = 'T'; }
void Hare(char grids[][GRIDS], int* pstep_hare) { int y = rand() % 10 + 1; if ((y == 1) || (y == 2)) { *pstep_hare += 0; } if ((y == 3) || (y == 4)) { *pstep_hare += 9; } if (y == 5 ) { *pstep_hare -= 12; } if ((y >= 6) && (y <=8)) { *pstep_hare += 1; } if ((y == 9) || (y == 10)) { *pstep_hare -= -2; } if (*pstep_hare <= 0) *pstep_hare = 0; if (*pstep_hare >= GRIDS - 1) *pstep_hare = GRIDS - 1; grids[1][*pstep_hare] = 'H'; }
void is_winner(char grids[][GRIDS])
{
char* arrofanimal[2] = { "Tortoise","Hare" };
for (int ani = 0; ani < ANIMALS; ani++)
{
//判断是否同时到达终点
if (grids[0][GRIDS - 1] == 'T' && grids[1][GRIDS - 1] == 'H')
printf("Both win!\n");
//判断胜利的一方
if (grids[ani][GRIDS - 1] != ' ')
{
printf("%s is winner!\n", arrofanimal[ani]);
}
}
}
main() { srand(time(NULL)); //Sleep(1000); int step_tor = 0;//起点 int step_hare = 0; printf("准备!\n"); //初始化赛道 char grids[ANIMALS][GRIDS] = { 0 }; init(grids); print(grids); int i = 0; int n = 1; //while (n <= 20)//只要没有冲过终点线,循环 while (grids[0][GRIDS - 1] == ' ' && grids[1][GRIDS - 1] == ' ')//只要没有冲过终点线,循环 { if (n == 1) { printf("比赛开始!\n"); } Tortorise(grids, &step_tor); Hare(grids, &step_hare); printf("i = %d,第%d次跳\n", i, n); print(grids); n++; } is_winner(grids); }
经过多次测试,比较神奇的是,当赛道较短时(设置N=10),乌龟有可能赢;当赛道较长(设置N=20/30/40),乌龟就没赢过!天赋决定的???₍˄·͈༝·͈˄₎◞ ̑̑*
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。