首页 > 编程知识 正文

python版约瑟夫环,python版约瑟夫环问题出圈列表

时间:2023-12-28 21:10:46 阅读:328625 作者:RKJR

本文目录一览:

新手如何自学编程

要熟悉编程范式,尤其是面向过程及面向对象这两种;要广泛阅读,多用编译器及IDE(网上有许多免费的)练习编程。

选择一种编程语言。初学者一定要从主流语言开始学习,比如中级语言C和C++。这两种语言是任何一名合格、专业的程序员都必须掌握的,因为它们称得上是软件开发界的主流。

但是最好不要从高级语言开始学,如Java,因为这些语言对于初学者来说难度未免太高(高级语言可以以后再学,但是C语言和C++应该作为你的基础)。

然而对于完完全全的门外汉的来说,可能C和C++都有点困难,那么你也可以从Python开始学,这种语言被大家广泛认为是适合初学者的。

C语言为什么程序单步调试正确,一整体运行就错误

malloc有问题。

line*head=(line*)malloc(sizeof(line));//

sizeof 是line不是line*。

下面的

line*body=(line*)malloc(sizeof(line));

同样处理。

count函数没细看。 不确定是否有问题。

输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。

定义数组的时候,增加一个单元即可

#include stdio.h

#define M 6

int wnn1(int *,int,int);

void wnn2(int *,int);

void main()

{int x,n,t,s[M+1]={10,15,18,24,29,35};

printf("input x:n");

scanf("%d",x);

n=M;

t=wnn1(s,x,n);

wnn2(s,t);

}

int wnn1(int *a,int x,int n)

{int i,j=0;

while(jna[j]x)j++;

for(i=n-1;i=j;i--)a[i+1]=a[i];

a[j]=x;

n++;

return n;

}

void wnn2(int *a,int n)

{int i;

for(i=0;in;i++)printf("%4d",a[i]);

printf("n");

}

C++编程:约瑟夫环问题。

/*

【基本要求】

基本的约瑟夫的描述:

古代某法官要判决N个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圆圈,

从第S个人开始数起,每数到第D个犯人,就拉出来处决,然后再数D个,数到的人再处决,

直到剩下的最后一个可赦免。

发展的约瑟夫的描述:

古代某法官要判决N个犯人的死刑,

但这N个人每人持有一个密码,他有一条荒唐的法律,将犯人站成一个圆圈,

法官先给出一个密码M,从第S个人开始数起,每数到第M个犯人,就拉出来处决,

再根据这个人所持有的密码F,然后再数F个,数到的人再处决,

以此类推直到剩下的最后一个可赦免。

【测试数据】

数据请自己添加。

*/

#include iostream

using namespace std;

// 表示一个犯人的结构体

struct Prisoner

{

// 编号

int id;

// 密码

int pass;

// 用于链表的指针

struct Prisoner * pre;

struct Prisoner * next;

};

class JosephCircle

{

public:

// 基本的约瑟夫构造函数

JosephCircle(int N,int S,int D);

// 发展的约瑟夫构造函数

JosephCircle(int N,int S,int M,int password[]);

// 输出约瑟夫环

void print();

// 开始处决犯人

void start();

private:

// 约瑟夫环的头指针

struct Prisoner * head;

// 第一个被处决的犯人的节点指针

struct Prisoner * firstPunishedPrision;

};

JosephCircle::JosephCircle(int N,int S,int D)

{

struct Prisoner * p , *pr;

// 约瑟夫环的头指针初始化为空

this-head = NULL;

// 构造一个由 N 个犯人组成的约瑟夫环

for(int i=1;i=N;i++)

{

// 当前添加的犯人是第一个犯人,要特殊处理一下

if(this-head == NULL)

{

// 新增一个犯人

p = new struct Prisoner();

// 犯人编号

p - id = i;

// 犯人密码

p - pass = D;

// 紧挨着的下一个犯人(因为是环状的,每个人都会有紧挨着的其他犯人)

p - pre = p;

p - next = p;

// 约瑟夫环的头指针

this-head = pr = p;

}

else

{

p = new struct Prisoner();

p - id = i;

p - pass = D;

p - pre = pr;

p - next = pr-next;

pr - next - pre = p;

pr - next = p;

pr = p;

}

}

// 寻找约瑟夫环里面第一个被处决的犯人的【节点指针】

firstPunishedPrision = head;

for(int i=2;i=(S+D-1);i++)

{

this-firstPunishedPrision = this-firstPunishedPrision - next;

}

}

JosephCircle::JosephCircle(int N,int S,int M,int password[])

{

struct Prisoner * p , *pr;

// 约瑟夫环的头指针初始化为空

this-head = NULL;

// 构造一个由 N 个犯人组成的约瑟夫环

for(int i=1;i=N;i++)

{

// 当前添加的犯人是第一个犯人,要特殊处理一下

if(this-head == NULL)

{

// 新增一个犯人

p = new struct Prisoner();

// 犯人编号

p - id = i;

// 犯人密码

p - pass = password[i-1];

// 紧挨着的下一个犯人(因为是环状的,每个人都会有紧挨着的其他犯人)

p - pre = p;

p - next = p;

// 约瑟夫环的头指针

this-head = pr = p;

}

else

{

p = new struct Prisoner();

p - id = i;

p - pass = password[i-1];

p - pre = pr;

p - next = pr-next;

pr - next - pre = p;

pr - next = p;

pr = p;

}

}

// 寻找约瑟夫环里面第一个被处决的犯人的【节点指针】

firstPunishedPrision = head;

for(int i=2;i=(S+M-1);i++)

{

this-firstPunishedPrision = this-firstPunishedPrision - next;

}

}

// 输出约瑟夫环

void JosephCircle::print()

{

struct Prisoner * p = this-head;

if(p != NULL)

{

do

{

cout "[编号:" p-id ",密码:" p-pass "]" ;

if(p-next != this-head)

{

cout" - ";

}

p = p-next;

}while(p != this-head);

}

cout endl endl;

}

// 开始处决犯人

void JosephCircle::start()

{

struct Prisoner * p = this-firstPunishedPrision,*pr,*q;

int counter = 1;

/*

因为约瑟夫环是一个循环链表(也就是一个圈),

当 p-next != p 的时候,说明圈里面还有多余一个的节点(犯人),

继续数数并处决犯人

*/

while(p-next != p)

{

// q 向当前被处决的犯人

q = p;

// 从约瑟夫环里面删除被处决掉的犯人

q - pre - next = q - next;

q - next - pre = q - pre;

p = p - next;

// 输出被处决的犯人的信息

cout "第 " (counter++) " 个被处决的犯人编号:" q-id endl;

// 寻找下一个将要处决的犯人

for(int i=1;i=(q-pass-1);i++)

{

p = p-next;

}

// 释放内存(被处决掉的犯人)。

free(q);

}

// 输出被赦免的犯人的信息

cout "被赦免的犯人的编号:" p-id endl endl;;

}

int main(int argc, char *argv[])

{

// 基本的约瑟夫环: JosephCircle(int N,int S,int D);

JosephCircle j1 = JosephCircle(3,1,2);

j1.print();

j1.start();

// 发展的约瑟夫环: JosephCircle(int N,int S,int M,int password[]);

int pass[]={1,5,3};

JosephCircle j2 = JosephCircle(3,1,2,pass);

j2.print();

j2.start();

return 0;

}

python类约瑟夫环原创问题求解 求大神

COUNT = 60  # 总人数

INDEX_FIRST = 2   # 第一次站出来的是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约瑟夫环怎么判

import collections

def joseph(lst,k):

    t = collections.deque(lst)

    while len(t)  1:

        t.rotate(-k)

        t.popleft()

    return t

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。