当前位置:首页 > 后端开发 > 正文

约瑟夫环c言语,问题布景

时间:2024-12-24阅读数:10

约瑟夫环问题是一个经典的编程问题,一般描绘为:N个人围成一圈,从榜首个人开端报数,签到M的人出列,然后从下一个人开端继续报数,如此循环,直到所有人都出列。这个问题的处理方案能够有多种,绵亘运用数组、链表等数据结构。

下面是一个运用数组来处理约瑟夫环问题的C言语完成:

```cinclude

void josephus { int people, i, count = 0, index = 0; // 初始化数组 for { people = i 1; } // 循环直到所有人都出列 while { // 报数 for { index = % n; } // 第m个人出列 printfqwe2; people = 0; count ; // 从下一个人开端报数 while == 0qwe2 { index = % n; } } printf;}

int main { int n, m; printf; scanf; printf; scanf; josephus; return 0;}```

这段代码首要界说了一个函数`josephus`来处理约瑟夫环问题。在`main`函数中,用户输入总人数N和报数M,然后调用`josephus`函数来输出出列的次序。在这个完成中,咱们运用了一个数组来模仿环形结构,并经过循环和取模操作来模仿报数和出列的进程。

约瑟夫环问题,又称为丢手绢问题,是一个经典的数学问题,起源于古代犹太历史学家约瑟夫的故事。这个问题在计算机科学、数学、物理等范畴都有广泛的运用。本文将具体介绍约瑟夫环问题的布景、解题思路以及C言语完成办法。

问题布景

约瑟夫环问题起源于一个陈旧的故事:39个犹太人为了逃避罗马人的追捕,躲进了一个山洞。为了保证不被敌人发现,他们决议采纳一种自杀办法,即39个人围成一圈,从榜首个人开端报数,每数到第3个人,该人就必须自杀。这个进程一向继续,直到只剩下一个人停止。约瑟夫和他的朋友不想遵照这个规矩,他们经过奇妙的办法,终究幸存下来。

问题剖析

约瑟夫环问题能够用以下办法描绘:有n个人围成一圈,从榜首个人开端报数,每数到m的人出列,然后从下一个人开端从头报数,直到所有人都出列。咱们需求找出最终留下的是本来第几号的人。

解题思路

处理约瑟夫环问题主要有以下几种办法:

模仿法:经过模仿整个进程,记载每个人的出列次序,最终找到留下的人。

数学法:运用数学公式直接计算出最终留下的人的编号。

循环链表法:运用循环链表模仿围成一圈的人,经过遍历链表来模仿报数和出列进程。

行列法:运用行列来模仿围成一圈的人,经过行列的先进先出特性来模仿报数和出列进程。

C言语完成

以下是一个运用模仿法完成的约瑟夫环问题的C言语程序:

```c

include

include

// 界说一个结构体来表明一个人

typedef struct Person {

int id; // 人的编号

struct Person next; // 指向下一个人的指针

} Person;

// 创立一个包括n个人的环形链表

Person createCircle(int n) {

Person head = NULL, tail = NULL, temp = NULL;

for (int i = 1; i id = i;

temp->next = NULL;

if (head == NULL) {

head = temp;

tail = temp;

} else {

tail->next = temp;

tail = temp;

}

}

tail->next = head; // 构成环形

return head;

// 模仿约瑟夫环问题

int josephus(int n, int m) {

Person head = createCircle(n);

Person current = head;

Person prev = NULL;

while (current->next != current) {

for (int i = 1; i next;

}

prev->next = current->next; // 移除当时节点

free(current);

current = prev->next;

}

int result = current->id;

free(current);

return result;

int main() {

int n, m;

printf(\

本站所有图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:[email protected]

猜你喜欢

  • 耗费运用python编程,从根底到实践

    耗费运用python编程,从根底到实践

    运用Python编程一般触及以下几个进程:1.装置Python:首要,你需求保证你的核算机上装置了Python。你能够从Python官方网站下载并装置合适你操...

    2025-01-10后端开发
  • r言语装置教程,R言语保姆级装置教程

    r言语装置教程,R言语保姆级装置教程 r言语装置教程,R言语保姆级装置教程 r言语装置教程,R言语保姆级装置教程

    装置R言语是一个相对简略的进程,以下是一个根本的装置攻略。请注意,具体的过程或许会根据您的操作体系和R版别的不同而有所差异。装置R言语1.下载R言语拜访R官方网站:https://www.rproject.org/在“DownloadR”部分,挑选合适您操作体系的版别...。

    2025-01-10后端开发
  • java8,敞开高效编程新时代

    Java8是Java编程言语的第八个首要版别,于2014年3月18日发布。这个版别引入了许多新的特性和改善,包含Lambda表达式、流...

    2025-01-10后端开发
  • 铃木swift报价,全面解析这款小型车的商场行情

    铃木swift报价,全面解析这款小型车的商场行情 铃木swift报价,全面解析这款小型车的商场行情 铃木swift报价,全面解析这款小型车的商场行情

    依据我找到的信息,铃木Swift(在中国商场被称为“雨燕”)的最新报价如下:1.日本商场:新一代铃木Swift在日本供给1.2升燃油版和1.2升轻混版两种动力挑选,并依据装备不同分为XG(燃油版)、MX(轻混版)、MZ(轻混版)三种车型,价格区间为172.7万233.2万日元,约合人民币8...。

    2025-01-10后端开发
  • swift怎样读,耗费开端学习Swift

    swift怎样读,耗费开端学习Swift

    Swift是一种编程言语,首要用于iOS、macOS、watchOS和tvOS的开发。它由苹果公司于2014年推出,旨在代替ObjectiveC...

    2025-01-10后端开发