josephus问题

yiyangdemeng yiyangdemeng 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <iostream.h>

void main()
{
//建立小孩数组
const int num=10 ; // 定义常量 小孩数为10
int interval; // 定义每次数interval 个小孩,便让该小孩离开
int a[num] ; // 定义小孩数组


//给小孩编号 顺序编为 1,2,3,…,10
for(int i=0; i<num; i++)
a[i]= i+1; //小孩从1号开始编

//输入数小孩的间隔
cout<<"please input the interval:" ; //输入一个间隔数
cin>>interval;

//将全体参加的小孩输出,用于比较
for( i=0; i<num; i++) //输入全体小孩的编号
cout<<a[i]<<",";
cout <<endl;

int k=1 ; //标识处理第k个离开的小孩
i=-1 ; //数组下标(下一个值0就是一个小孩的下标) (注:在VC++中 int k=1;int i=-1是错的)

//处理获胜前的小孩
while(1) //一直循环执行
{// 执行范围:在圈中的interval个小孩
for(int j=0;j<interval;)
{
i=(i+1)%num; //对下标加1求模,(其实只是针对头和尾的)
if(a[i]!=0) //如果该元素的小孩在圈中,则承认数数有效
j++;
}
if(k==num) break; //如果该小孩是最后一个,则跳出循环

cout<<a[i]<<","; //输出小孩离开后的编号
a[i]=0; //标识小孩已经离开

k++; //准备处理下一个圈中的小孩
}

// break语句跳转到此
cout<<"\nNo."<<a[i]<<"boy's won. \n"; //输出胜利者
}

c++执行结果:

please input the interval: 5
1,2,3,4,5,6,7,8,9,10,
5,10,6,2,9,8,1,4,7,
No.3boy's won.
Press any key to continue


int k=1 ; //标识处理第k个离开的小孩
i=-1 ; //数组下标(下一个值0就是一个小孩的下标) (注:在VC++中 int k=1;int i=-1是错这仍然不懂,这是干什么用的?i=(i+1)%num; //对下标加1求模,(其实只是针对头和尾的)
if(a[i]!=0) //如果该元素的小孩在圈中,则承认数数有效
j++;
这一段也不懂,怎么看怎么理解不了,真是头疼了,加一求模是什么意思了?
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
yiyangdemeng
C++ 语言 65,214 成员 250,514 内容