
正文
python约瑟夫函数 约瑟夫算法流程图
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python约瑟夫圆环的解法
现在有13个人围成一个环,从1开始报数,数到3的人离开,写出程序计算最后剩下的是谁。
使用while循环
使用for循环
使用递归
摒弃递归,每次步长不为k时候都把当前元素弹出并放到队列尾部,从而模拟循环链表结构。进一步优化,由于列表弹出第一个元素的复杂度较高,可以使用双端队列来进行优化:
相关问答
Q1: python3 实现约瑟夫环
#coding=GBK
class Node():
def __init__(self,value,next=None):
self.value = value
self.next = next
def createLink(n):
if n=0:
return False
elif n ==1:
return Node(1)
else:
root = Node(1)
tmp = root
for i in range(2,n+1):
tmp.next = Node(i)
tmp = tmp.next
tmp.next = root
return root
def showLink(root):
tmp = root
while True:
print(tmp.value)
tmp = tmp.next
if tmp ==None or tmp == root :
break
def josephus(n,k):
if k ==1 :
print("幸存者:",n)
return
root = createLink(n)
tmp = root
while True:
for i in range(k-2):
tmp = tmp.next
print("killed:",tmp.next.value)
tmp.next = tmp.next.next
tmp = tmp.next
if tmp.next == tmp:
break
print("survive:",tmp.value)
if __name__ =='__main__':
josephus(10,13)
计算结果:
killed: 3
killed: 7
killed: 2
killed: 10
killed: 1
killed: 6
killed: 8
killed: 9
killed: 4
survive: 5
Q2: 约瑟夫问题描述: 编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始
#includestdio.h
#includemalloc.h
//1.元素类型python约瑟夫函数,结点类型和指针类型
typedef struct LNode //定义结构体,
{
int number,password; //num用来存储人python约瑟夫函数的序号,pwd用来存储人的密码
struct LNode *next;
}SLX;
struct LNode *head,*p,*pt; //定义结点
//2 、创建循环链表函数
int CreatLinkListFunction(int n) //参数n传递人数,
{
int i;
head=(struct LNode*)malloc(sizeof(SLX)); //创建一个带头结点的链表
p=head;
for(i=1;in;i++)
{
pt=(struct LNode*)malloc(sizeof(SLX));
p-next=pt;
p=pt;
}
p-next=head; //构成循环链表
pt=head;
return 0;
}
//3.创建输入密码函数
int EnterPassword(int n) //参数n传递人数
{
int i,k;
printf("\n请输入密码: \n");
for( i=1;i=n;i++)
{
scanf("%d",k);
pt-number=i; //num存储人的序号
pt-password=k; //pwd存储人的密码
pt=pt-next;
}
pt=p;//创建循环链表 此时P是头结点head 这个函数存入密码 之后再一次返回密码
return 0;
}
//4、创建输出函数
int OutListFunction(int m,int n) //参数m、n传递报数上限值和人数
{
int i,a;
for(i=1;i=n;i++) //用一个for循环搜索循环链表
{
for(a=1;am;a++) //删除结点
{
pt=pt-next;
}
p=pt-next;
m=p-password;
printf("%d ",p-number); //输出人的序号
pt-next=p-next;
free(p); //释放动态申请的结点空间
}
return 0;
}
//主函数
void main()
{ int m,n; //m为报数上限值,n为人数
printf("\n参数m、n传递报数上限值和人数;\n");
printf("\n请输入 m 和n: \n");
scanf("%d %d",m,n);
CreatLinkListFunction( n); //调用创建链表函数
EnterPassword( n); //调用输入密码函数
printf("\n出队的人依次是:\n");
OutListFunction( m,n); //调用输出链表函数
}
Q3: 【基础】Python3小程序_约瑟夫生者死者小游戏
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
方法一:无算法运算
方法二:算法队列,利用队列先进先出的原理
queue模块学习
基础使用函数
q=queue.Queue(n) #建立长度为n的先进先出队列FIFO
q=q=queue.LifoQueue(n) #建立长度为n的后进先出队列LIFO
q.put() #放入元素
q.get() #取出元素
模块其他函数
Q4: Python语言之如何实现约瑟夫环问题
def josephus(n, m):
if type(n) != type(1) or n = 0:
raise Exception('n must be an integer(n 0)')
if n == 1:
return 0
else:
return (josephus(n - 1, m) + m) % n
if __name__ == '__main__':
print josephus(8, 3)
print josephus(1, 2)
print josephus(0, 2)
Q5: python类约瑟夫环原创问题求解 求大神
COUNT = 60 # 总人数
INDEX_FIRST = 2 # 第一次站出来python约瑟夫函数的是2号
origin = list(range(1, COUNT+1))
res = []
index_label = INDEX_FIRST - 1
index_temp = 0
while origin:
index_temp = (index_label + index_temp) % len(origin)
res.append(origin.pop(index_temp))
index_label += 1
print(res)
请点击输入图片描述
关于python约瑟夫函数和约瑟夫算法流程图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








