n只猴子要选大王,选举方法如下:所
有猴子按 1,2 ……… n 编号并按照顺序围成一圈,
从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,
下一只猴子再次由1开始报数,
如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。

#include<iostream>
#include<vector>
using namespace std;
int main()
{int m,n;cin>>m>>n;vector<int> v;for(int i=1; i<=m; i++){v.push_back(i);}int t=1;while(m>1){    t+=n-1;t=!(t%m)?m:t%m;v.erase(v.begin()+t-1);    //删除当前vector中第t个元素m--;}cout<<v[0]<<endl;return 0;
}

下面这种大同小异,只不过更容易理解

#include<iostream>
#include<vector>
using namespace std;
int main()
{int m,n;cin>>m>>n;vector<int> v;for(int i=1; i<=m; i++){v.push_back(i);}int t=1;while(v.size()>1){    t+=n-1;t=!(t%v.size())?v.size():t%v.size();v.erase(v.begin()+t-1);    //删除当前vector中第t个元素
    }cout<<v[0]<<endl;return 0;
}

下面是用C语言写的,没有任何技巧性

#include<stdio.h>
#define Maxsize 100
double max_min(int i, int* a)
{int m, n, r;int *p, *q;double s = 0, min, max, maxmin;for (m = 2; m <= i; m++)  //子列长度
    {p = a;    //子列首元素指针q = a;for (n = 1; n <= i - m + 1; n++)   //子列起始位置
        {            for (r = 1; r < m; r++)     {q++;max = (double)*p;min = (double)*p;if (max<*q)max = *q;if (min>*q)min = *q;                }    p++;q = p;maxmin = max - min; s += maxmin;}}return s;
}int main()
{int i, j;double s;int a[Maxsize];scanf("%d", &i);for (j = 0; j<i; j++){scanf("%d", &a[j]);}s = max_min(i, a);printf("s=%lf\n", s);    return 0;
}

其实题目的思想很简单,但是花了两个多小时才完成!!!

突破口1:一点点数学技巧

突破口2:使用vector容器

第一次看到题目后就想到了list,折腾了一个多小时还是不行,不得不转变思路。。

于是用了和数组最相近的vector容器,还真就成功了,哈哈!!

##############################这是分界线,是不一样的我##########################################

2016.4.21

上面的几个代码都是模拟法,复杂度为log(nm)面对大数据就心有余而力不足了……

今天在hihocoder上面看到约瑟夫问题,可以进行bp优化的~优化后为log(n),爽

//约瑟夫问题dp优化
#include<iostream>
using namespace std;
int k;int fun(int n){if(n == 1)return 0;else if(n <= k)return (fun(n - 1) + k) % n;else{if(fun(n - n / k) < n % k)return n - n % k + fun(n - n / k); elsereturn fun(n - n / k) - n % k + (fun(n - n / k) - n % k) / (k - 1);}
}int main(){int T, N;cin >> T;while(T--){cin >> N >> k;cout << fun(N) << endl;}    return 0;
} 

转载于:https://www.cnblogs.com/fengyanlover/p/4943670.html

约瑟夫问题(猴子选大王)相关推荐

  1. 约瑟夫环-猴子选大王(变型题)

    约瑟夫环-猴子选大王(变型题) 接着上篇猴子选大王继续展开,上篇讲的是有m个猴子,从第一个猴子开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数. 这篇我们来说,从任意猴子k的位置开 ...

  2. 约瑟夫环 猴子选大王

    <? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...

  3. 约瑟夫环 猴子选大王的问题

    问题: 有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王:经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王.要求:从键盘输入M.N,编程计算 ...

  4. 循环链表-约瑟夫问题-猴子选大王

    总时间限制(Time limit): 1000ms 内存限制(Memory limit): 65536kB 描述(Description) 有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第 ...

  5. 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]

    2032 猴子选大王 Description 有N只猴子,从1~N进行编号.它们按照编号的顺时针方向排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报的第一个数字为1,以后每只猴子报的数字都是它们前 ...

  6. 数据结构猴子选大王java_数据结构例子-猴子选大王

    约瑟夫问题(猴子选大王):   n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...

  7. python猴子选大王_sicily 猴子选大王

    题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...

  8. 猴子选大王--约瑟夫问题浅析

    猴子选大王--约瑟夫问题浅析 猴子选大王问题是一个十分经典的算法问题,这个问题是这样的:一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N ...

  9. 约瑟夫环问题之猴子选大王

    猴子选大王的描述为:n只猴子围成一圈,顺时针方向从1到n编号.之后从1号开始沿顺时针方向让猴子从1,2,...,m依次报数,凡是报到m的猴子,都让其出圈,取消候选资格.然后不停的按顺时针方向报数,让报 ...

最新文章

  1. python selenium 爬取js加载的内容为空,Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容...
  2. 声学漫谈之七:扬声器等效电路与参数
  3. bootstrap 模态框满屏_如何设置Bootstrap模态框modal的高度和宽度?
  4. linux硬件配置_Linux硬件配置
  5. SpringBoot项目从Git拉取代码并完成编译打包启动的sh自动脚本
  6. 股市法则:长线大钱最终胜出(荀玉根、姚佩)
  7. 按摩椅控制板的开发让按摩椅变得简约智能
  8. Python中filter筛选函数匿名参数问题
  9. 360无线wifi路由器连接到服务器,两个360路由器如何并连 两个无线路由器桥接设置方法...
  10. C++STL之string类
  11. win7系统设置无线临时(计算机到计算机)网络 手机,win7系统添加设置无线临时网络的操作方法...
  12. input[type=file]如何屏蔽“未选择任何文件”
  13. 【vue】实现超过两行或多行显示展开收起 (单个展开收起和数组多个展开收起)
  14. 计算机科学新技术新应用发展,新技术的发展和应用
  15. 17道Python面试题,让你在求职中无往不利
  16. 西安地铁行业投融资状况与发展策略建议报告2022版
  17. 超简单:快速制作一款高逼格词云图
  18. win10删除/编辑注册表时出错的解决方法
  19. 计算机一级电脑在线模拟,2017全国计算机一级考试模拟试题
  20. I/O多路复用之select、epoll的实现和区别 ,ET与LT模式

热门文章

  1. 解决vue2+vue-cli3项目ie兼容问题
  2. yarn install node-sass(gulp-sass) 安装失败解决方案
  3. php抛出异常Exception和\Exception使用区别
  4. 关于使用IDEA导入项目后依赖报错的解决方案
  5. 未捕获的错误:始终违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象
  6. Win11系统Windows更新疑难解答出现问题怎么办?
  7. Win11未安装Defender怎么办?解决Win11未安装Defender的方法
  8. RVCT31编译问题
  9. flask json传输失败_GO小知识之实例演示 json 如何转化为 map 和 struct
  10. python 微服务 etcd_python etcd api