Josephus问题
来源:互联网 发布:开淘宝店考试 编辑:程序博客网 时间:2024/05/21 09:30
使用C++解决Josephus问题:一群小孩围成一圈,任意假定一个间隔数interval,从第一个小孩数起,数到第interval个的时候,该小孩离开,依次这样数下去,最后一个小孩是胜利者,问:胜利者是第几个小孩?在运行时由用户输入小孩数,并进行输入检查,小孩数不能小于1,间隔数不能小于1,也不能大于小孩数,如果发现输入错误应该让用户选择:停止运行、重新输入、以默认值10个小孩间隔3让其运行。
本题关键就是结构体与链表的结合,,当访问到间隔数的小孩对象时,将这个对象的值--标记--为--0--,,再就是xxx和sss两个变量,前者控制间隔数,后者控制跳出的时机。
输出时借助一个循环,当结构体数组中元素的值不为0时,,输出此元素的值就OK了~~
#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct Node
{
Node*pnext;
int con;
};
int main()
{
while(1 == 1)
{
int n,m;
cin>>n>>m;
if(n<1 || m<1 || n<m)
{
int pp = 3;
cout<<"输入1重新输入、输入2停止运行、输入3则以默认值10个小孩间隔3运行"<<endl;
cin>>pp;
if(pp == 1)
continue;
else if(pp == 2)
break;
else if(pp == 3)
{
n = 10;
m = 3;
}
}
Node peo[n];
Node *phead;
for(int i = 0; i<n-1; i++)
{
peo[i].pnext = &peo[i + 1];
peo[i].con = i + 1;
}
peo[n-1].pnext = &peo[0];
peo[n-1].con = n;
phead = &peo[0];
int sss = 0;
int xxx = 0;
while(phead != 0)
{
if(phead -> con != 0)
{
xxx++;
if(xxx == m)
{
phead -> con = 0;
xxx = 0;
sss++;
}
}
if(sss == n-1)
break;
phead = phead -> pnext;
}
for(int j = 0; j<n; j++)
{
if(peo[j].con != 0)
{
cout<<peo[j].con<<endl;
}
}
}
return 0;
}
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- josephus 问题
- Josephus问题
- Josephus问题
- josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- 阿里上个财年中国
- win10和linux双系统的安装
- hihocoder 数论二·Eular质数筛法
- AngularJs中promise 和 $q 的一点解释
- 第二周-Coursera/Stanford机器学习课程学习笔记-多变量线性回归
- Josephus问题
- Session会话失效,重定向到登录页面,iframe模式框架下,会出现在iframe中
- iOS开发之Thrift的二进制数据编解码
- NY10 skiing
- Hibernate5.01 的Maven的依赖
- HDU 5667 Sequence (矩阵快速幂 + 费马小定理)
- 同步软件29个软件
- 第八课 linux系统概览(3)
- DNS记录类型介绍(A记录、MX记录、NS记录等)