1.求解最后一个

N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。
例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。
输入
2个数N和K,表示N个人,数到K出列。(2 <= N, K <= 10^6)
输出
最后剩下的人的编号
输入样例

3 2

输出样例

3

#include <bits/stdc++.h>
using namespace std;
//迭代写法
int Joseph(int n,int m)
{/* if(n <= 1 || m <= 1)return -1;*/int ans = 0;for(int i = 2; i <= n; i++){ans = (ans + m) % i;}return ans+1;
}
int main()
{int n,m;cin>>n>>m;cout<<Joseph(n,m)<<endl;return 0;
}

#include <bits/stdc++.h>
using namespace std;
//递归写法
int Joseph(int n,int m)
{/*if(n <= 1 || m <= 1)return -1;*/if(n == 2){if(m&1)return 2;elsereturn 1;}elsereturn (Joseph(n-1,m)-1 + m) % n + 1;
}
int main()
{int n,m;cin>>n>>m;cout<<Joseph(n,m);return 0;
}

2.求解每一个

题目背景
约瑟夫是一个无聊的人!!!

题目描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入格式
n m

输出格式
出圈的编号

输入输出样例
输入 #1 复制

10 3

输出 #1 复制

3 6 9 2 7 1 8 5 10 4

说明/提示
m,n≤100


//way4:vector模拟
#include <bits/stdc++.h>
using namespace std;
vector<int>v;
int main()
{int n,m;cin>>n>>m;for(int i = 1; i <= n; i++)v.push_back(i);int x = 0;for(int i = 0; i < n; i++){x = (x + m - 1) % v.size();cout<<v[x]<<" ";v.erase(v.begin()+x);}return 0;
}
//way3:队列模拟
#include <bits/stdc++.h>
using namespace std;
int main()
{queue<int>q;int n,m;cin>>n>>m;if(!n||!m) return 0;for(int i = 1; i <= n; i++){q.push(i);}int cnt = 0;while(q.size()>1){int x = q.front();cnt++;q.pop();if(cnt % m == 0){cout<<x<<" ";continue;}q.push(x);}cout<<q.front()<<endl;q.pop();return 0;
}
//way2:环形链表模拟
#include <bits/stdc++.h>
using namespace std;
typedef struct Node
{int num;struct Node *nxt;
}node;
node* createNode(int x)
{node *p;p = new node;p->num = x;p->nxt = NULL;return p;
}
node* createJoseph(int n)
{node *p,*head,*q;for(int i = 1; i <= n; i++){p = createNode(i);if(i == 1)head = p;elseq->nxt = p;q = p;}q->nxt = head;return head;
}
void runJoseph(int n,int m)
{node *p = createJoseph(n);node *q = NULL;while(p->nxt != p){for(int i = 1; i < m-1; i++){p = p->nxt;}q = p->nxt;cout<<(q->num)<<" ";p->nxt = q->nxt;p = p->nxt;delete q;}cout<<(p->num)<<endl;
}
int main()
{int n,m;cin>>n>>m;if(n&&m)runJoseph(n,m);return 0;
}
//way1:数组模拟
#include <iostream>using namespace std;
bool vis[105];
int main()
{int n,m;cin>>n>>m;int cnt = 0,num = 0;while(cnt<n){for(int i = 1; i <= n; i++){if(vis[i]) continue;num++;if(num % m == 0){vis[i] = true;if(cnt != n)cout<<i<<" ";else cout<<i<<endl;cnt++;if(cnt == n) break;}}}return 0;
}
//数组模拟链表
#include <bits/stdc++.h>
using namespace std;
int nxt[105];
int main()
{int n,m;cin>>n>>m;for(int i = 1; i <= n; i++)nxt[i] = i+1;nxt[n] = 1;for(int i = n,j = 1; n;i = nxt[i],j++){if(j % m == 0){cout<<nxt[i]<<" ";nxt[i] = nxt[nxt[i]];n--;}}return 0;
}

简单约瑟夫环问题解法汇总(模拟/数论)相关推荐

  1. C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题

    1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈:下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序. 考虑问题: 报到T的人出圈,怎么表示出 ...

  2. 约瑟夫环问题(vector模拟过程)

    1862: zbj的狼人杀 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 这天zbj和小 ...

  3. 映射递归循环-约瑟夫环问题递归解法的一点理解

    先说明一点,如果有什么不对的地方,欢迎大家批评指正. 先来看这个类型的某个题目描述: 约瑟夫生者死者游戏 约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分.因此船长告诉乘 ...

  4. 约瑟夫环——C++红书~第六章指针课后习题第5题

    约瑟夫环问题 解法一 #include<bits/stdc++.h> //

  5. 求约瑟夫环问题最后胜利者的一般解法以及数学推导方法

    问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 解法一: 思路:建立一个有N个元素的循环链表,然后从链表表头遍 ...

  6. 约瑟夫环解法大全(C语言版)

    前言: 约瑟夫环不愧是一道经典的算法题,原来也经常看到,但一直没有动手编码研究.最近又被同学提起这个问题,就研究了一下,发现这个问题可以挖掘的东西有很多,怪不得一直是面试的热门问题. 解法一,使用链表 ...

  7. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  8. java实现简单的约瑟夫环问题(二)

    Josephus(约瑟夫)问题的数学方法 前面的内容都是直接来来自于百度百科,后面才是我对这段话的理解 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间 ...

  9. 这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了

    转载请联系公众号:bigsai 前言 约瑟夫环问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本,并且约瑟夫环问题还有很多变形,这篇约瑟夫问题的讲解,一定可以带你理解通 ...

最新文章

  1. 学python有哪些书推荐-有什么Python学习的书籍和学习资源推荐?
  2. iOS中XML解析汇总
  3. 【倾情奉献】遥感物候研究:30年长时间序列遥感数据集GIMMS 3g NDVI产品预处理完整步骤
  4. C#正则表达式开源工具
  5. java引入resource下的模板_Beetl自定义ResourceLoader,实现特殊的模板加载需求
  6. 优秀!Python神器NumPy 论文终登上了 顶刊Nature!
  7. C语言 · 十六进制转十进制
  8. java 日志技术_java 日志技术汇总(log4j , Commons-logging,.....)
  9. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的排课管理系统
  10. Android 几种解析XML文件方式的区别
  11. 建模算法(六)——神经网络模型
  12. python默认编码有什么用_Python2.7.8的默认编码是什么?
  13. 免费JS甘特图组件dhtmlxgantt
  14. IDEA2017版本的破解方法
  15. 微信小程序--点击水波涟漪效果
  16. SEO中的十大关键词竞争度分析方法
  17. 需求调研过程管理小议
  18. ubuntu14.04+cuda8.0(gtx1080)下tensorflow的安装
  19. Ubuntu 14.04 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
  20. Fragmentation 源码分析

热门文章

  1. python运行列表的结果不同_python 3 代码一模一样,出现运行结果不同的情况(只是不以为一样而已)...
  2. python编程语言一览_编程语言学习:python有趣用法汇总
  3. 绘制方法太单一!?这三个宝藏在线学习资源推荐给你~~
  4. 为什么 Git把 SVN拍在了沙滩上!
  5. java sessionstorage_sessionStorage的使用
  6. pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库
  7. 某业务付费统计脚本问题排查
  8. [Swift]最强UIButton解析 | #selector()绑定点击事件
  9. Tensorflow中2D卷积API使用
  10. 常用的方法论-鱼骨图