出题:Josephus
Cycle,约瑟夫环问题。k个数字连成一个环,第一个数字为1。首先从1开始计数删除第m个数字;然后从上次被删除的数字的下一个数字开始计数,删除第m个数字;重复进行第二步直到只剩下一个数字;输出最后剩下的一个数字;分析:解法1:考虑到问题的特殊性,可以使用哑元素表示删除的元素从...
分类:
其他好文 时间:
2014-05-27 01:35:42
阅读次数:
251
#include#include#include#include using namespace
std;template class joseph{ struct node { T data; node * next; node():next(...
分类:
编程语言 时间:
2014-05-26 13:58:27
阅读次数:
215
题目链接:POJ 2886 Who Gets the Most
Candies【题目】N个孩子顺时针坐成一个圆圈,从1~N编号,每个孩子手中有一张标有非零整数的卡片。第K个孩子先出圈,如果他手中卡片上的数字A>0,下一个出圈的是他左手边第A个孩子。A0,
因为这个人出去了,那么后面的人的编号都会先减...
分类:
其他好文 时间:
2014-05-19 10:25:12
阅读次数:
193
和上一题一样,寻找第K个位置,只不过需要处理一下下一个位置在哪,画图看看就知道了。
#include
#include
#include
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 30000+5;
int sum[maxn<<...
分类:
其他好文 时间:
2014-05-15 20:07:28
阅读次数:
262
题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2
#include
int main()
{
int n,m,i,s=0;
scanf("%d",&n);
m=3;
...
分类:
其他好文 时间:
2014-05-15 01:30:58
阅读次数:
231
#include
using namespace std;
const int size = 1000;
void ArrDel()
{
int arr[size];
//循环结束标志,一直循环到数组中只剩下最后一个元素结束
int currentNum = size;
int count = 0;
for (int k = 0; k < size; k++)
{
arr...
分类:
其他好文 时间:
2014-05-13 15:53:09
阅读次数:
282
假设下标从0开始,0,1,2 ..
m-1共m个人,从1开始报数,报到k则此人从环出退出,问最后剩下的一个人的编号是多少?现在假设m=100 1 2 3 4 5 6 7 8 9
k=3第一个人出列后的序列为:0 1 3 4 5 6 7 8 9即:3 4 5 6 7 8 9 0 1(*)我们把该式转....
分类:
其他好文 时间:
2014-05-09 08:24:29
阅读次数:
231
《具体数学》通过三个例子来讲递归,分别是:HanoiTower(汉诺塔)、LinesinthePlane(平行中的直线)、JosephusCircle(约瑟夫环问题)这三个例子一直被数学家们反复研究;已知解法都使用递归,大问题化为小问题;都可以用计算机程序来求解;我最近因为考试忙的其实也没看几页,就先把..
分类:
其他好文 时间:
2014-05-09 06:56:00
阅读次数:
270
【问题描述】
约瑟夫环问题(Josephus)
用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus)
【解题思路】
构建一个循环链表,每个结点的编号为1,2,......,n。每次从当前位置向前移动m-1步,然后删除这个结点。
【C程序代码】
#include
#include
type...
分类:
其他好文 时间:
2014-05-06 19:37:20
阅读次数:
270