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. 学习笔记——Maven实战(一)坐标规划

    坐标是什么?为什么要规划? 坐标是Maven最基本的概念,它就像每个构件的身份证号码,有了它我们就可以在数以千万计的构件中定位任何一个我们感兴趣的构件.举个最简单的例子,如果没有坐标,使用JUnit的 ...

  2. DELL VENUE 11 PRO系统损坏之后的解决办法

    首页说明下我的平板是dell venue 11 pro atom版+win8.1版. 前两天测试玩win10,结果后来几天这货直接开不了机了,每次提示自动修复,但是却说找不到某一文件,然后蓝屏,win ...

  3. 大型网站系统架构实践(六)深入探讨web应用集群Session保持

    原理 在第三,四篇文章中讲到了会话保持的问题,而且还遗留了一个问题,就是会话保持存在单点故障, 当时的方案是cookie插入后缀,即haproxy指负责分发请求,应用服务自行保持用户会话,如果应 用服 ...

  4. [C#基础]Func和Action学习

    目录 委托 Action Func 总结 委托 委托的那些事 关于委托的基本定义,在很久之前的这篇文章中,有个简单的介绍.稍微回顾一下. 委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函 ...

  5. Linq之Lambda表达式初步认识

    目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...

  6. php字符串比较函数

    比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求 一样:后者要求“equal”,值相同就可以了,参考[1].或 ...

  7. 复合sql

    update select update bucp..Core_Flow_Opinion set useruid =(select user_uid from bua..bua_user b wher ...

  8. HTML5 文件操作API

    简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面. ...

  9. Java基础-转义字符

    Java中的字符占两个字节.一些常用的转义字符: ①\r表示接受键盘输入,相当于按下了回车键: ②\n表示换行: ③\t表示制表符,相当于Table键: ④\b表示退格键,相当于Back Space键 ...

  10. 【CodeForces 626E】Simple Skewness

    题意 给出n个数的集合,求一个 (平均数-中位数)最大 (偏度最大)的子集,输出子集元素个数和各个元素(任意顺序). 分析 因为是子集,所以不一定是连续的序列.然后我们有下面几个结论. 1.最大偏度一 ...