一道普通的C/C++编程题,勿喷

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;
}

小弟拙见,走过大神有何观点请提,小弟不胜感激。

猜你喜欢

转载自blog.csdn.net/wangzhiyu12/article/details/84147060
今日推荐