c语言经典递归法算法的疑问:(必须用递归算法做出来哦) 题目请看问题补充

2020-10-27 教育 90阅读
#include
int jos(int n, int k); // n表示总共有多少人, k表示报数的第几个数退出
int main(void)
{
int n,k,s;
printf("请输入总人数和间隔数(中间以空格隔开)\n");
scanf("%d %d", &n, &k);
s = jos(n, k);
printf("获胜者是:%d\n", s);

return 0;
}
int jos(int n,int k)
{// 每次运行都返回当前淘汰出来的位置
int x;
if(n==1) // 当剩下最后一个的时候他就是获胜者
x=1;
else
{// 如果多余一个
x=(jos(n-1,k)+k)%n; // 继续从剩余的这些人中进行选取获胜(%n达到了循环的目的)(这里利用n-1时的淘汰位置加上k是下一个淘汰位置, 此时n又被减少)
if(x==0)
x=n;
}

return x;
}
/*
请输入总人数和间隔数(中间以空格隔开)
37 5
获胜者是:1
Press any key to continue
*/
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com