当前位置: 首页 > news >正文

cn域名的网站直播:英格兰vs法国

cn域名的网站,直播:英格兰vs法国,建设音乐主题网站,微信小程序可以做网站用描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少? O(n) 示例1 好环形链表的约瑟夫问题是一个经典的问…

在这里插入图片描述
描述
编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。
下一个人继续从 1 开始报数。
n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?
O(n)
示例1
好环形链表的约瑟夫问题是一个经典的问题,它的描述如下:有n个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,直到剩下最后一个人。现在给定n和m,求最后剩下的人的编号
这个问题可以使用环形链表来解决。具体来说,我们可以先构建一个包含n个节点的环形链表,然后从第一个节点开始遍历链表,每次遍历m个节点,将第m个节点从链表中删除。重复这个过程直到链表中只剩下一个节点为止,这个节点就是最后剩下的节点
输入:
5,2
返回值:
3
说明:
开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开
1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
1,3,5,从5开始报数,5->1,1->2编号为1的人离开
3,5,从3开始报数,3->1,5->2编号为5的人离开
最后留下人的编号是3
示例2
输入:
1,1
复制
返回值:
1
关于环形链表的约瑟夫问题,具体思路如下:
首先创建一个环形链表,链表中每个节点代表一个人,节点编号从1开始递增。
然后从第一个节点开始报数,每报到第m个人就将该节点从链表中删除。
删除节点后,从下一个节点重新开始报数,重复上述步骤,直到只剩下一个节点为止。
下面是C++代码实现:

#include <iostream>
using namespace std;struct ListNode {int val;ListNode* next;ListNode(int x) : val(x), next(NULL) {}
};int josephus(int n, int m) {ListNode* head = new ListNode(1);ListNode* cur = head;for (int i = 2; i <= n; i++) {cur->next = new ListNode(i);cur = cur->next;}cur->next = head; // 将链表首尾相连while (cur->next != cur) { // 只剩下一个节点时结束循环for (int i = 1; i < m; i++) {cur = cur->next;}ListNode* tmp = cur->next;cur->next = tmp->next;delete tmp;}int ans = cur->val;delete cur;return ans;
}int main() {int n, m;cin >> n >> m;cout << josephus(n, m) << endl;return 0;
}

C语言代码实现

#include <stdio.h>
#include <stdlib.h>// 定义链表节点结构体
typedef struct Node {int num;            // 节点编号struct Node *next;  // 指向下一个节点的指针
} Node;// 创建环形链表
Node *createList(int n) {Node *head = NULL, *tail = NULL;for (int i = 1; i <= n; i++) {Node *p = (Node *)malloc(sizeof(Node));p->num = i;if (head == NULL) {head = p;} else {tail->next = p;}tail = p;}tail->next = head;  // 将尾节点指向头节点,形成环形链表return head;
}// 约瑟夫问题求解
void josephus(Node *head, int m) {Node *p = head, *prev = NULL;while (p->next != p) {  // 只剩下一个节点时结束循环for (int i = 1; i < m; i++) {prev = p;p = p->next;}prev->next = p->next;  // 删除节点printf("%d ", p->num);free(p);p = prev->next;  // 从下一个节点重新开始报数}printf("%d\n", p->num);free(p);
}int main() {int n, m;printf("请输入总人数n和报数m:");scanf("%d%d", &n, &m);Node *head = createList(n);josephus(head, m);return 0;
}
http://www.ds6.com.cn/news/71623.html

相关文章:

  • 网站制作的核心是什么网页百度网盘
  • B2B网站做不出排名跟流量产品市场营销策划方案
  • 天猫网站左侧导航用js怎么做阿里云域名注册官网网址
  • cn网站品牌软文营销案例
  • 企业网站建设 ppt怎样在百度上免费做广告
  • 上海网站排名优化推荐seo是什么意思中文
  • 旅游网站建设需求说明书seo优化流程
  • 搞笑网站源码深圳华强北
  • 电商类网站咋做湘潭高新区最新新闻
  • 软件开发网站建设太原网站建设方案咨询
  • 北京房产网二手房源seo推广培训学费
  • 中山营销网站建设联系方式sem网络推广是什么
  • 自己做挖矿网站友情链接的作用大不大
  • 做logo的网站网络营销管理
  • 下载浏览器并安装seo合作代理
  • 做电子商务平台网站关键词挖掘爱站网
  • 制作杂志 wordpress主题windows优化大师功能
  • 大学网站建设与功能开发都有什么推广平台
  • 网站开发人员 生活免费网页模板网站
  • 建设部网站注册网站seo设计方案案例
  • 保定seo全网营销如何优化关键词搜索排名
  • 网站设计行业前景常用的五种网络营销工具
  • 建站报告2000字2345网址导航应用
  • 个人网站设计介绍文字网络工程师培训一般多少钱
  • 翻译建设网站品牌营销策略分析论文
  • 专做polo衫的网站综合搜索引擎
  • jsp网站服务建设是什么今日预测足球比分预测
  • angularjs 做电商网站百度收录提交入口地址
  • 做网站价格多少百度推广开户价格
  • node可以做电商网站么地推接单平台app排行榜