假如有n个学生排成一圈,编号从1到n,每个人有初始积分,不防设为100。从1号开始掷骰子,骰子出现后,根据点数减去掷骰人的相应积分,如减去 10*(6 - 投掷点数),然后根据点数多少,就依次向后数掷骰的点数同等数量的人,被数到的最后一个人继续掷骰子,计算积分,依此类推。如果某人掷骰后,其积分小于等于0则出列,余下的人继续按照此法进行游戏,直到剩下最后一个人,为胜利者。要求打印每次出列的人的编号,掷骰子的次数,当前积分。并打印最后胜利者的相应信息。
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int i, j, k = 0, l;//定义变量
int n,num;//n为学生数量,num为掷出的筛子点数
cout << "请输入学生数量" << endl;
cin >> n;
int* N = new int[n];
int* M = new int[n];
for (i = 0; i < n; i++)//将每个小孩的分数存在数组中
{
N[i] = 100;
M[i] = 0;
}
srand(time(NULL));//将种子传递给rand()
for (j = 1;j<n; )
{
num = rand() % 6 + 1;//每次筛子掷出的点数
N[k] -= 10 * (6 - num);//计算掷出后该同学的分数
M[k] += 1;//掷色子数加1
if (N[k] <= 0)
{
cout << "第" << j << "个淘汰的是" << k + 1 << "号,他的分数是" << N[k] << ",掷色子的次数是" << M[k] << endl;
j++;
}
for (int count = 0; count < num; )//判断下一位掷色子的同学
{
k++;
if (k == n)
k = 0;
if (N[k] > 0)
{
count++;
}
}
}
for (l = 0; l < n; l++)
{
if (N[l] > 0)
cout << "恭喜" << l + 1 << "号同学赢得游戏,他的最后分数是" << N[l] << ",掷色子次数是" << M[l] << endl;
}
delete[]M;//释放内存
delete[]N;//释放内存
return 0;
}
运行结果如下: