猴子选大王c语言课程设计,【C/C++】猴子选大王

这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

【问题描述】要从n只猴子中选出一位大王。它们决定使用下面的方法:

n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请问最后哪只猴子被选为大王。

【输入形式】控制台输入三个整数n,m,q。

【输出形式】输出最后选为大王的猴子编号。

【样例输入】

7 4 3

【样例输出】

4

【样例说明】输入整数n = 7,m = 4,n = 3,输出4

【评分标准】本题要求输出最后被选为大王的猴子编号,完全正确得20分,每个测试点4分。上传C语言文件名为monkey.c。

【代码】

还记得,这道题折磨我到凌晨不知道几点...当时的逻辑似乎就是绕不过来,但是想通后就觉得很简单了。我已经有写过约瑟夫问题,感兴趣的主页搜索即可。

下面是代码:

#include //选个鬼哦,头疼

int a[5201314];

int main()

{

int c_k(int n,int m,int q);

int n,m,q;

scanf("%d %d %d",&n,&m,&q);

printf("%d",c_k(n,m,q));

return 0;

}

int c_k(int n,int m,int q)

{

int i;

int sum=0;//累加数sum

int count=n; //儿子个数赋初值

for(i=0;i

i=q-1;//从第q个猴子开始数

while(i<=n)

{

if(i==n)i=0;//哈哈哈哈哈哈哈哈哈哈哈哈,看不懂吧

sum+=a[i];

if(sum==m)

{

sum=a[i]=0;//淘汰(给该数组元素赋值,相当于带上标记

count-=1;

if (count==1) break;

}

i++;

}

for(i=0;i

if(a[i]!=0)break;//找到就跳出来

return (i+1);//返回

}

原先代码有些注释实在不雅。。我就删除了。

PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

你可能感兴趣的:(猴子选大王c语言课程设计)