用C语言怎么做练习3

代码如下,如有bang帮助,请采纳一下,谢谢。

#include <iostream>
#include <vector>
using namespace std;

const int N = 17;  //猴子数量n
const int M = 3;   //数到m

//打印N只猴子的状态(“1”表示在圈内,“0”表示不在圈内)
void printVec(const vector<int> &v)
{
	for (vector<int>::const_iterator it = v.begin();it != v.end();++it)
	{
		cout<<*it<<' ';
	}
	cout<<endl;
}

int monkeyKing(vector<int> v)
{
	//n记录还有多少只猴子在圈内
	int n = N;
	int k = 0;
	int i;
	while (n > 1)
	{
		for (i=0;i<N;++i)
		{
			k += v[i];
			if (k == M)
			{
				v[i] = 0;
				printVec(v);
				k = 0;
				--n;
			}
		}
	}
	//最后一只猴子下标为1
	for (int i=0;i<N;++i)
	{
		if (1 == v[i])
			return i+1;
	}
}

int main()
{
	vector<int> v(N,1);
	cout<<"猴大王是第"<<monkeyKing(v)<<"只."<<endl;


	getchar();
	getchar();
	return 0;
}

 

供参考:

#include <stdio.h>
#define ARR_SIZE 100

void sort_game(int *p,int n,int k);

int main(int argc, char* argv[])
{
     int i,m,n,num[ARR_SIZE];

     scanf("%d%d",&n,&m);
     if( m > n ) m=n-1;
     for(i=0;i<n;i++){
            num[i] = i+1;
     }

     sort_game(num,n,m);
     
     return 0;
}

void sort_game(int *p,int n,int m)
{
     int i=0,cm=0,k=0;
     while(k<n-1){
         if(*(p+i)!=0)cm++;
         if(cm==m){
            *(p+i)=0;//退出圈子标志
            cm=0;
            k++;
         }
         i++;
         if(i==n)i=0;
     }
     while(*p==0)p++;
     printf("%d\n",*p); //输出:最后留下的编号
}