没有合适的资源?快使用搜索试试~ 我知道了~
首页约瑟夫环问题用C++代码实现
8. 【题目】约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 要求:(1)定义递归函数int jos(int n, int k); n表示总人数, k表示报数的第几个数,返回最后一个人的编号。 (2)在主函数中输入总人数和报的数,输出最后一个人的编号。
资源详情
资源评论
资源推荐

【 题 目 】 约 瑟 夫 环 ( 约 瑟 夫 问 题 ) 是 一 个 数 学 的 应 用 问 题 : 已 知 n 个 人 ( 以 编 号
1,2,3...n 分别表示)围坐在一张圆桌周围。从编号为 1 的人开始报数,数到 k 的那个人
出列;他的下一个人又从 1 开始报数,数到 k 的那个人又出列;依此规律重复下去,直到
圆桌周围的人全部出列。
要求:(1)定义递归函数 int jos(int n, int k); n 表示总人数, k 表示报数的第几个数,
返回最后一个人的编号。
(2)在主函数中输入总人数和报的数,输出最后一个人的编号。
#include<iostream>
using namespace std;
int jos(int n, int k)
{
int i,j,a[1000],t,len;
len = n;
for(i=0;i<n;i++)
a[i] = i+1;
i=0;
while(n>1)
{
i = (i+k-1)%n;//计算需要移动的节点
t = a[i];
for(j=i;j<n-1;j++)//移动 i 后面的节点
a[j]=a[j+1];
a[j]=t;// 将 i 放到新数组的末尾
n--;
}
return a[0];
}
int main()
{
int n,m;
cout<<"输入 n(总人数)和 m(删除的数):";
cin>>n>>m;
cout<<"最后剩下的人的编号:"<<jos(n,m);
return 0;
}

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0