1009: josephus问题

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 549  Solved: 227

Description

josephus问题其实就是一个游戏,一群小孩围成一个圈,设置一个数,这个数是个小于小孩总数大于0的一个整数,从第一个小孩开始报数,当其中一个小孩报到你设置的那个数的时候离开那个圈,这样一来反复报下去,直到只剩下最后一个小孩的时候那个小孩就是胜利者。现在的问题是设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。下面要解决的Josephus问题是:对于任意给定的n, s和m,求出这n个人的出局序列。请以n = 9, s = 1, m = 5为例,人工模拟Josephus的求解过程以求得问题的解。出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。本题可以对多个测试案例进行测试。

Input

第一行输入测试案例数T 以下T行,每一行是一个测试案例,分别输入n,s,m,以一个或多个空格隔开

Output

每个测试案例输出2行,第一行输出出局顺序第2行输出"** win.",其中**是胜利者编号,即最后出局者

Sample Input

1
9 1 5

Sample Output

5 1 7 4 3 6 9 2 8
8 win.

开学初看得别人用链表来写这道题是云里雾里,而如今已经自己可以写了。(o。o虽然又出现了一堆云雾)

总之是进步了,嘿嘿。
对了,这道题还有纯数学的做法。
 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Link
{
int num;
struct Link *next;
}IA; int n,s,m; IA *Create();
void *Delete(IA *head); int main()
{
//freopen("a.txt","r",stdin);
IA *head=NULL,*tail=NULL;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&s,&m);
tail=Create();
Delete(tail);
}
return ;
} IA *Create()
{
IA *head=NULL,*q,*tail;
tail=head;
int i=;
while(i<=n)
{
q=(IA*)malloc(sizeof(IA));
q->num=i;
if(head==NULL)
{
head=q;
tail=q;
tail->next=NULL;
}
else
{
tail->next=q;
q->next=NULL;
tail=q;
}
i++;
}
tail->next=head;
// Print(head);
return tail;
} void *Delete(IA *tail)
{
int cnt=,hui=,i=;//cnt记数,数到m就让此时的人出局;hui记录出局人数
IA *ptr1,*ptr2;
if(tail->next==NULL)
return;
ptr1=tail;
ptr2=tail->next;
while(i!=s)
{
ptr1=ptr2;
ptr2=ptr2->next;
i++;
}
while(hui!=n-)
{
++cnt;
if(cnt==m)
{
printf("%d ",ptr2->num);
ptr1->next=ptr2->next;
free(ptr2);
cnt=;
hui++;
}
else
ptr1=ptr2;
ptr2=ptr1->next;
}
printf("%d\n%d win.\n",ptr1->num,ptr1->num);
} /*void Print(IA *head)
{
IA *p;
if(head==NULL)
return; printf("%d ",head->num);
for(p=head->next;p!=head;p=p->next)
{
printf("%d ",p->num);
}
printf("\n\n");
}*/

循环链表

1009: josephus问题的更多相关文章

  1. Josephus环类问题,java实现

    写出一个双向的循环链表,弄一个计数器,我定义的是到三的时候,自动删除当前节点,很简单. package Com; import java.util.Scanner; /* * 约瑟夫环问题,有n个人组 ...

  2. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. 1009: [HNOI2008]GT考试

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...

  4. Josephus环问题

    约瑟夫环问题 问题描述: Josephus问题可以描述为如下的一个游戏:N个人编号从1到N,围坐成一个圆圈,从1号开始传递一个热土豆,经过M次传递后拿着土豆的人离开圈子,由坐在离开的人的后面的人拿起热 ...

  5. Bloomberg面经准备: Josephus problem

    Given a circular single linked list.Write a program that deletes every kth node until only one node ...

  6. 约瑟夫(环)问题(Josephus problem)

    问题描述:皇帝决定找出全国中最幸运的一个人,于是从全国选拔出 n 个很幸运的人,让这 n 个人围着圆桌进餐,可是怎么选择出其中最幸运的一个人呢?皇帝决定:从其中一个人从 1 开始报数,按顺序数到第 k ...

  7. [题解]hdu 1009 FatMouse' Trade(贪心基础题)

    Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...

  8. josephus Problem 中级(使用数组模拟链表,提升效率)

    问题描写叙述: 在<josephus Problem 0基础(使用数组)>中.我们提出了一种最简单直接的解决方式. 可是,细致审视代码之后.发现此种方案的效率并不高,详细体如今.当有人出局 ...

  9. 终于完成了Josephus的C语言实现啦~~

    /*以下程序用来解决Josephus问题,现在只是完成了M>N的情况,2015-08-20 22:22:20*//*发现一个问题:数组的赋值问题:char People[N]={1};并不代表所 ...

随机推荐

  1. 有四中方法可以实现PHP的伪静态,你造吗?

    说起伪静态的实现方案,你是不是很爽快的回答"简单,配置下apache的重写规则就行了嘛" 但是你有没有发现这种情况,你最近弄了很多新功能,每天上几个新功能,每天都有好多伪静态配置, ...

  2. Command Pattern -- 命令模式原理及实现(C++)

    主要参考<大话设计模式>和<设计模式:可复用面向对象软件的基础>两本书.本文介绍命令模式的实现. What it is:Encapsulate a request as an ...

  3. blur效果,模糊效果css

    .blur { -webkit-filter: blur(5px);   -moz-filter: blur(5px);   -o-filter: blur(5px);   -ms-filter: b ...

  4. linq入门系列导航

    写在前面 为什么突然想起来学学linq呢?还是源于在跟一个同事聊天的时候,说到他们正在弄得一个项目,在里面用到了linq to sql.突然想到距上次使用linq to sql是三年前的事情了.下班回 ...

  5. java设计优化-享元模式

    享元模式是设计模式中少数几个以调高系统性能为目的的设计模式.它的核心思想是:如果在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象.在享元模式中,由于需要构建 ...

  6. 关于 Maven 的插件maven-war-plugin

    在进行项目发布的时候,可能会碰到这样的情况, 希望在保持项目源代码不变的前提下,希望能够针对不同的运行环境获得相应的运行包.(比如war包) 基本配置 :(包括排除 不想打进war包的jar 的配置) ...

  7. 洛谷P2024 食物链

    挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...

  8. IQ测试

    1.4个人过桥,只能两两过桥,且只有一盏灯,必须有灯才能过桥,4个人过桥时间分别为1,2,5,10分钟,最短多少时间可以过桥? 答案:1和2先走,1再返回,花3分钟.5和10走,2回去,花了3+10+ ...

  9. HTTPS-能否避免流量劫持

    流量劫持是什么? EtherDream在一篇科普文章<>中详细介绍了流量劫持途径和方式. 流量劫持是一种古老的攻击方式,比如早已见惯的广告弹窗等,很多人已经对此麻木,并认为流量劫持不会造成 ...

  10. IOS基础之 (二) 面向对象思想

    编写Objective-C程序时,要使用Foundation框架. 什么是框架? 框架(framework)是由很多类(class)组成的库,可以用来编写程序. 对象(Object) 对象可以保存数据 ...