问题遇到的现象和发生背景
假如有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;
}
运行结果及报错内容
运行无结果输入
我的解答思路和尝试过的方法
我想要达到的结果
解答我写出的代码问题所在,感谢