博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构--线性表及其应用 约瑟夫环
阅读量:6816 次
发布时间:2019-06-26

本文共 1135 字,大约阅读时间需要 3 分钟。

约瑟夫(Joseph)环问题

编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。

如果不要求用单向循环链表的话可以有更加优雅的解法。

#include "pch.h"#include 
using std::cout;using std::cin;using std::endl; class node {public: node * pnode = 0; int secret; int id = 1;};int main(){ int numberOfNode; //用户输入的数据个数 int m; //初始的数字 int id = 1; //节点标号 cin >> m; cin >> numberOfNode; //应该不会只有一个节点吧 node * head = new node; node * prev = head; node *now = 0; cin >> head->secret; int numberOfNode1 = numberOfNode - 1; while (numberOfNode1--) { now = new node; cin >> now->secret; now->id = ++id; prev->pnode = now; prev = now; } now->pnode = head; //初始化循环链表 node * p = head; prev = nullptr; while (numberOfNode) { int count = 1; while (count != m) { count++; prev = p; p = p->pnode; } //模拟数数 prev->pnode = p->pnode; //去掉一个节点 m = p->secret; cout << p->id << " "; node *tmp = p->pnode; delete p; numberOfNode--; p=tmp; } return 0;}

 

 测试数据

2073 1 7 2 4 8 4输出:6 1 4 7 2 3 5

 

转载于:https://www.cnblogs.com/BD1A489/p/9794879.html

你可能感兴趣的文章
7 逻辑回归
查看>>
java里的基本知识
查看>>
行走在前端路上的一些想法
查看>>
hdu 5288 ZCC loves straight flush
查看>>
前端爬虫cheerio&&puppeteer
查看>>
Linux日常操作整理
查看>>
rem和em的用法
查看>>
【译】整理->20个让你效率更高的CSS代码技巧
查看>>
Prometheus学习系列(十一)之Hello World
查看>>
IDEA常用设置及推荐插件
查看>>
java多线程基本概述(十一)——ReadWriteLock
查看>>
机器学习 深度学习 计算机视觉 资料汇总
查看>>
深度学习网络结构中超参数momentum了解
查看>>
js几种创建对象的方式
查看>>
微信小程序中this关键字使用技巧
查看>>
multiprocessing的基础用法
查看>>
N的阶乘的长度 V2(斯特林近似) 求 某个大数的阶乘的位数 .
查看>>
第二十二课:运算放大电路
查看>>
geek必备工具列表
查看>>
SVN 目录 定义
查看>>