12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到最后只剩下一个小朋友,求解这个小朋友原来站在什么位置上呢?
下面是代码
#include<iostream>
#include<math.h>
using namespace std;
void return_result(){
int a[13]; //记录小朋友的位置数组
int i,j;
int b[2];
int h=0;
int length=12;
for(i=1;i<=12;i++){a[i]=i; }
i=1;
int reme_num=0; //记录位置
int length1=length; //length1为中间量,length为a数组的长度,也就是玩游戏小朋友现有人数
while(a[2]!=-1){
h=1;
for(int i=0;i<2;i++){
b[i]=-1;
} //初始化数组b,赋值为-1
for(int i=1;i<=length1;i++){
reme_num++;
if(reme_num==7){
b[h--]=i; //如果数到7,记下此时小朋友位置
length--; //长度减一
reme_num=0; //将位置记录值设为0
}
//最后一轮,将该删的全删了
if(i==length1){
int m=0;
while(m<2){
if(b[m]!=-1){
for(int j=b[m];j<length1;j++){ //从b记录的位置,将后面的向前移动一位
a[j]=a[j+1];
}
for(int h=length1;h<=12;h++){ //将a数组中没用的位置的数值设为-1
a[h]=-1;
}
}
m++;
}
length1=length; //改变length1的量
}
}
for(int i=1;i<=length1;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
cout<<"最后剩的一个同学的编号为:"<<a[1]<<endl;
}
int main(){
return_result();
return 0;
}
小弟拙见,走过大神有何观点请提,小弟不胜感激。