问题描述
- 经典问题:猴子选大王!本人c语言新手?
-
山上住着10个猴子,猴子编号从1到10。现要从中选出一个大王。猴子们围成一圈,从第一个猴子开始数数,数到n就退出圈子,直到剩下最后一个猴子,并输出猴子王的编号。
解决方案
刚学一维数组。。。。
解决方案二:
这里将人数定死在10个人了
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int i, j, k, m;
int num[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//以1至n为序给每个人编号
printf("输入报数的数字:j=");
scanf("%d",&j);
i = 0;//i为每次循环时计数变量
k = 0;//k为按1,2,3...报数时的计数变量
m = 0;//m为退出人数
while(m < 9)//当退出人数比n-1少时执行循环体
{
if(num[i] != 0)//当前的这个人还没有出局
k++;
if(k == j)//这个人这轮需要出局
{
printf("出局人序号:%dn", num[i]);
num[i] = 0;//将退出的人的编号置为0
k = 0;//k报到j后,重置为0
m++;//退出的人数+1
}
i++;
if(i == 10)
i = 0;//报数到尾后,i恢复为0
}
for(i = 0; i < 10; i++)
{
if(num[i] != 0)
printf("最后留下的人的编号是:%dn", num[i]);//只有一个num[i]不是0
}
system("pause");
return 0;
}
解决方案三:
这是个经典的循环链表 具体的写不出来
时间: 2024-11-18 01:05:29