17个人围成圈,编号为1—17,从第1号开始报数, 报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号
/*17个人围成圈,编号为1—17,从第1号开始报数,
报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。*/
#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;
//用循环对数组赋初值,为符合日常,舍弃下标为0,从1开始计数
for (i = 1; i < N+1; i++) {
num[i] = i;
}
while( m < N-1 ) {
if (num[i]!=- 1) {
k++;
}
//报到3则出局,游戏重新开始计数
if (k == 3) {
num[i] = -1;
m++;
k = 0;
}
i++;
if (i == N + 1) {
i = 1;//到圈末端就从头重新开始报数
}
}
//找出剩下的那个人
for (int i = 1; i <N+1; i++) {
if (num[i] != -1) {
cout << num[i] << " ";
}
}
system("pause");
return 0;
}