josephus问题
#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++;
这一段也不懂,怎么看怎么理解不了,真是头疼了,加一求模是什么意思了?
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++;
这一段也不懂,怎么看怎么理解不了,真是头疼了,加一求模是什么意思了?
...全文
相关推荐
Josephus问题c++程序
Josephus问题的解答,分别使用不同的方法
Josephus问题C++单循环链表实现
这个完全符合课本上习题的要求,我作业交的就是这个,我自己还在里面做了详细的注释
josephus问题源代码
用c++解决了josephus问题:有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。
Josephus问题.zip
生活不易,赚点积分...C语言实现,大二作业...
Josephus问题
设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人开始报数,数到m的人又出列,如此重复,直到所有的人全部出列。Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。


