hdu1443(约瑟夫环游戏的原理 用链表过的)
Suppose that there are k good guys and k bad guys. In the circle the first k are good guys and the last k bad guys. You have to determine such minimal m that all the bad guys will be executed before the first good guy.
4
0
30
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int vist[30];
typedef struct list
{
int data;
struct list *next;
}Lnode,*LinList; void creat_L(LinList *L)
{
(*L)=(LinList)malloc(sizeof(Lnode));
(*L)->data=0;
(*L)->next=(*L);//形成环
}
int DeleteNode(LinList L,int k,int n)//n是走的步数,k是有多少个好人和坏人
{
int j,i=0,badk=0,mod;
LinList q=L; while(i<k)//i是代表有i个坏人被处决
{
q=q->next;
j=1;//j=1是从当前位置开始计数,看下面的代码
while(vist[q->data]||q->data==0)//跳过己经处决的,vist为0时,表示这人还活着
{
q=q->next;
}
mod=n%(2*k-i);//(2*k-i)代表活着的人数,mod就等于走了很多圈以后余下的步数少于活着的人数
if(mod==0)//代表从当前位置走了n步后又最后会回到当前位置,那么就等于活着的人数
mod=2*k-i;
while (j<mod)//开始走
{
q=q->next;
if(vist[q->data]==0&&q->data!=0)//为了跳过处决了的,活着才能+1,算是一步
j++;
}
if(q->data<=k)//代表处决的是好人,不满足只处决坏人,不用往下走了,跳出循环
break;
if(q->data>k)//大于k的说明处决的是坏人,那么计数加一个
badk++;
vist[q->data]=1;//代表处决了
i++; //下一次 //printf("%d ",q->data);
}
return badk;//反回处决坏人的人数
} void Crea_list(LinList L,int n)//创建一个以n个人的圈
{
int i;
LinList q=L,p;
for(i=n;i>=1;i--)
{
p=(LinList)malloc(sizeof(Lnode));
p->data=i;
p->next=q->next;
q->next=p;
}
} int main()
{
int i,k,m,j,t,a[16];
LinList L,q;
for(j=1;j<14;j++)//打表
{
creat_L(&L);
Crea_list(L,2*j);
q=L;
if(j<=9)
for(m=j+1;;m++)//表法要直的步数
{
memset(vist,0,sizeof(vist));
t=DeleteNode(L,j,m); if(t==j)//表法以当前的步数走,处决的坏个等于坏人总数,就跳出来
break;
}
else
{
m=90000;
for(;;m++)
{
memset(vist,0,sizeof(vist));
t=DeleteNode(L,j,m); if(t==j)
break;
}
}
a[j]=m;
}
while(scanf("%d",&k)>0&&k)
{
printf("%d\n",a[k]);
}
}
/*
1
2
2
7
3
5
4
30
5
169
6
441
7
1872
8
7632
9
1740
10
93313
11
459901
*/
hdu1443(约瑟夫环游戏的原理 用链表过的)的更多相关文章
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- 3,java数据结构和算法:约瑟夫环出队顺序, 单向环形链表的应用
什么是约瑟夫环? 就是数小孩游戏: 直接上代码: 要实现这个,只需要理清思路就好了 孩子节点: class Boy{ int no;//当前孩子的编码 Boy next; // 下一节点 public ...
- 约瑟夫环问题 --链表 C语言
总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出 #include <stdio.h>#include <s ...
- 约瑟夫环(Joseph)的高级版(面向事件及“伪链表””)
约瑟夫环问题: 在一间房间总共有n个人(下标0-n-1),只能有最后一个人活命. 按照如下规则去杀人: 所有人围成一圈 顺时针报数,每次报到q的人将被杀掉 被杀掉的人将从房间内被移走 然后从被杀掉的下 ...
- 约瑟夫环问题的链表解法和数学解法(PHP)
约瑟夫环问题 一群猴子排成一圈.按1,2,-,n依次编号.然后从第1仅仅開始数,数到第m仅仅,把它踢出圈.从它后面再開始数,再数到第m仅仅.在把它踢出去-.如此不停的进行下去.直到最后仅仅剩下一仅仅猴 ...
- Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)
1.Josephu(约瑟夫.约瑟夫环)问题: 设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m ...
- 单向环形链表解决约瑟夫环(Josephus)问题
一.约瑟夫环问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那 ...
- C语言链表实现约瑟夫环问题
需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; ...
- C语言数组实现约瑟夫环问题,以及对其进行时间复杂度分析
尝试表达 本人试着去表达约瑟夫环问题:一群人围成一个圈,作这样的一个游戏,选定一个人作起点以及数数的方向,这个人先数1,到下一个人数2,直到数到游戏规则约定那个数的人,比如是3,数到3的那个人就离开这 ...
随机推荐
- sqlite编译
1.下载代码:http://www.sqlite.org/download.html ,windows下下载sqlite-amalgamation-xxx.zip和sqlite-dll-win32-x ...
- vector的用法总结
Reference Constructors vector Constructs a vector of a specific size or with elements of a specific ...
- C语言数组作为函数参数
数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...
- CI框架uri去掉index.php
CI框架的入口是index.php,所以url实际上要多出一个index.php,非常不美观.我使用的是apache服务器,要开启mod_rewrite服务才可以. sudo a2enmod rewr ...
- python学习第三天 --布尔类型
我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and ...
- 六度分离--hdu1869
六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 如何实现SQL事务的提交,又不对外进行污染(2)
紧接着上文,这里主要记录事务操作,实现多实体的功能 在SqlTran类中添加方法如下: 1.两个不同实体类型的事务方法: /// <summary> /// 执行事务(事务中不同实体) / ...
- bzoj 3238 Ahoi2013 差异
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2357 Solved: 1067[Submit][Status ...
- Keil "RECURSIVE CALL TO SEGMENT"彻底解决
我们在做菜单程序或通过函数指针调用函数时,如果被调用的函数中有包含了常量字符串,那么经常会出现这样的的错误提示:"RECURSIVE CALL TO SEGMENT"意思是&quo ...
- TXMLDocument换行的两种方案
手写代码: XML格式化使用msxml引擎,Delphi代码如下: Delphi/Pascal code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...