约瑟夫环c言语,问题布景
约瑟夫环问题是一个经典的编程问题,一般描绘为: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(\
猜你喜欢
- 后端开发
python入门代码,轻松敞开编程之旅
当然能够!Python是一种十分盛行的编程言语,合适初学者入门。下面是一个简略的Python入门代码示例,用于打印Hello,World!到操控台:```pythonprint```这段代码运用了Python的`print...
2024-12-25 0 - 后端开发
怎样运转python代码,从入门到实践
运转Python代码一般有几种办法,以下是几种常见的办法:1.运用指令行/终端:翻开指令行或终端。导航到包括Python代码的文件夹。运转指令`python文件名.py`,其间“文件名”是您Python文件的称...
2024-12-25 1 - 后端开发
r言语plot,制作图表的强壮东西
1.线图:用于展现数据随时间或其他连续变量的改变趋势。```R示例数据time制作线图plot```2.散点图:用于展现两个变量之间的联系。```R示例数据x制作散点图plot```3.柱状图:用于展现分类数据的频率或百分...
2024-12-25 0 - 后端开发
少年go,少年GO,芳华的公益之旅
《少年GO》实际上是指《TF少年GO!》,这是一档由北京年代峰峻文明艺术发展有限公司旗下的TF宗族于2013年11月15日创始的综艺节目。该节目集资讯、播报、脱口秀等多种元素于一身,首要包含以下几个模块:1.源文在哪:介绍TF宗族成员的最...
2024-12-25 1 - 后端开发
rust怎样拆门,Rust编程言语中模仿拆门进程的办法与技巧
在Rust编程言语中,并没有直接的操作来“拆门”,由于Rust是一种体系编程言语,它首要重视于内存安全、并发性和功能。假如您是在议论怎么操作游戏中的门或许模仿环境中的门,那么您或许需求运用特定的游戏引擎或许模仿结构来处理这种交互。假如您是在...
2024-12-25 3 - 后端开发
Python解方程,从根底到高档运用
当然能够。在Python中,解方程一般能够经过几种办法来完成,包含运用数学库如`numpy`和`scipy`中的函数,或许编写自界说的求解算法。下面我将供给一个简略的比如,展现怎么运用Python解一个一元二次方程。假定咱们有一个一元二次方...
2024-12-25 2 - 后端开发
python海龟绘图,轻松入门与构思实践
这个代码示例创建了一个简略的海龟绘图程序。它首要设置了一个窗口(画布)和一只海龟,然后让海龟以每边100个单位的长度制作一个正方形。海龟每走完一边,就向右转90度,直到完结整个正方形。海龟被躲藏,窗口坚持翻开状况,以便用户能够看到制作的图形...
2024-12-25 2 - 后端开发
php戏法办法, 什么是戏法办法?
1.`__construct`:结构函数,当创立目标时主动调用。能够用来初始化目标。2.`__destruct`:析构函数,当目标被毁掉时主动调用。能够用来开释资源。3.`__call`:当调用一个不存在的办法时,会调用这个办法。4....
2024-12-25 1