c++实训 选猴子当大王

 首先将代码放在前边

#include 
using namespace std;

// 函数king:猴子选大王
// 参数:a-猴子数组n-1个猴子分别占据下标为~n-1的位置,n-数组长度
// 返回值:新猴王的下标序号
int king(int a[], int n);

int main()
{
    int n, a[1000], i;     // 定义变量及数组,n-猴子数量,a-猴子数组
    cin >> n;     // 输入猴子数量,n>0

    // 初始化猴子数组,n 个猴子分别占据 n 个位置
    a[0] = 0; // 0号位置没有猴子
    for(i = 1;i <= n; i++)
        a[i] = i;

    // 选大王啦
    i = king(a, n );
    cout << i << "号猴子是大王。" << endl;
    return 0;
}

int king(int a[], int n)
{
    // 请在此添加代码,实现函数king
    /********** Begin *********/
    int num=n,nx=1,m=1;
	while(num>1){
		for(int i=1;i<=3;i++){
			while(a[nx]==0){
				nx++;
				if (nx==n+1)nx=1;
				
			}
			if(i==3){
				a[nx]=0;
				num--;
			}else {
				nx++;
			}
			if (nx==n+1)nx=1;
			
		}
		
			    
	
		
	}
	for (int j=1;j<=n;j++){
		if(a[j]!=0){
			return j;
		}
	}
	

        本题利用循环可以解决这个问题,判断依据为只剩一个猴子,也就是只有一个数不为0时即可。但本人在练习过程中,最初开始没加上:if (nx==n+1)nx=1;  导致在下一次循环开始判断a[nx]==0时出了错误。比如有5个猴子,当nx=6时进行判断a[nx]==0出错,a[nx]没有赋值,个人一开始以为没赋值就是0,在那个while判断中可以进行出来,但结果不是。

我编了一小段代码来进行检验

#include 
using namespace std;
int main() {
	int a[10];
	for (int i = 0; i <= 5; i++) {
		cin >> a[i];
	}
	for (int i = 0; i < 10; i++) {
		cout << a[i] << " ";
	}
	return 0;
}

输入为0 1 2 3 4 5

输出为:0 1 2 3 4 5 -858993460 -858993460 -858993460 -858993460

我个人认为这是一个值得注意的点。

你可能感兴趣的:(头歌c++程序设计,c++)