c++编程,掷骰子游戏设计。

问题遇到的现象和发生背景

假如有n个学生排成一圈,编号从1到n,每个人有初始积分,不防设为100。从1号开始掷骰子,骰子出现后,根据点数减去掷骰人的相应积分,如减去 10*(6 - 投掷点数),然后根据点数多少,就依次向后数掷骰的点数同等数量的人,被数到的最后一个人继续掷骰子,计算积分,依此类推。如果某人掷骰后,其积分小于等于0则出列,余下的人继续按照此法进行游戏,直到剩下最后一个人,为胜利者。要求打印每次出列的人的编号,掷骰子的次数,当前积分。并打印最后胜利者的相应信息。

问题相关代码,请勿粘贴截图
#include <iostream>
#include <cstdlib>
#include <ctime>
#define N 100
using namespace std;

int Rnum()    //产生掷点数。
{
    srand((unsigned)time(NULL));
    int n;

    n=rand()%6+1;

    return n;
}
int main()
{
    int m,n;    //学生数m,掷点数n。
    int a[N]={0},a1[N]={0},i=1,j=0,k=0,cnt=0;        //学生编号i,出局人数cnt。
    cout<<"学生数为:";
    cin>>m;

    for(i=0;i<N;i++){
        a[i]=100;
    }
    n=Rnum();
    a[1]=100-10*(6-n);
    do{    
        i++;
        if(i>m)
            i=1;
        if(a[i]>0){        //未出局。
            k++;
            if(k==n){    //能掷骰子。
                n=Rnum();
                a[i]=100-10*(6-n);
                j=i;
                a1[j]++;
                k=0;
                if(a[i]<=0){    //出局。
                    cnt++;
                }
            }
        }
    }while(cnt!=m-1);
    for(i=1;i<=m;i++){
        if(a[i]>0){
            j=i;
            cout<<"胜利者编号:"<<i<<endl;
            cout<<"胜利者掷骰子次数:"<<a1[j]<<endl;
            cout<<"胜利者当前积分:"<<a[i]<<endl;
        }else{
            j=i;
            cout<<"出列学生编号:"<<i<<endl;
            cout<<"出列学生掷骰子次数:"<<a1[j]<<endl;
            cout<<"出列学生当前积分:"<<a[i]<<endl;
        }
    }

    return 0;
}

运行结果及报错内容

运行无结果输入

我的解答思路和尝试过的方法
我想要达到的结果

解答我写出的代码问题所在,感谢

}while(cnt!=m-1);---这个条件要求仅当cnt 等于m-1时才会退出循环,要确认不出现死循环

36行 a[i]=100-10*(6-n);应该有问题,应该是a[i] -= 10*(6-n); 经过多轮后,a[i]不再是基础的100分啊,你不能每次都是100减去一个值,这样a[i]永远不会小于40,就不会淘汰,死循环

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632