卡住的原因应该是因为while最后一个if的判断那里,i=N+1这个应该是判断变成了赋值,然后导致程序后续计算错误而死循环了。
不能计算出正确结果具体是因为如下两方面的原因:
一是因为初始访问数组的下标变量i没有初始化为0,即不是从数组第一个元素开始判断,可以在while循环之前,让i置0,即从数组第一个元素开始判断;
二是因为当超过数组最后一人的判断那里出错了,数组最后一人后面的下标为N,所以把判断i=N+1改为i==N, 再把里面的i=1改为i=0即可,因为数组第一个元素的下标是0,修改如下:
/*c。*/
#include<iostream>
using namespace std;
int main() {
int N = 0;
cout << "请输入围成圈的人数" << endl;
cin >> N;
int num[100]; //存储参加游戏人数的数组
int m = 0; //m为退出人数
int k = 0; //k为报数计数
int i = 1;
int j = 0;//i为圆圈进行游戏里的人的计数
//用循环对数组赋初值
for (i = 0; i < N; i++) {
num[i] = i+1;
}
i=0; //初始化访问数组的下标变量为0,即初始从数组第一个位置开始判断
while( m < N-1 ) {
if (num[i]!=- 1) {
k++;
}
//报到3则出局,游戏重新开始计数
if (k ==3) {
//printf("k=%d,num[%d]=%d,m=%d\n",k,i,num[i],m);
num[i] = -1;
m++;
k = 0;
}
i++;
if (i == N ) {
i = 0;//到圈末端就从头重新开始报数
}
}
//找出剩下的那个人
for (int i = 0; i < N; i++) {
if (num[i] != -1) {
cout << num[i]<<" ";
}
}
system("pause");
return 0;
}