约瑟夫问题(数到3出局)----链表操作
来源:互联网 发布:佛山网站seo推广 编辑:程序博客网 时间:2024/05/16 01:20
n个人排成一圈。从某个人开始,按顺时针方向依次编号。从编号为1的人开始顺时针“一二三”报数,报到3的人退出圈子。这样不断循环下去,圈子里的人将不断减少。求出最后剩下的人是第几个人。
之前用数组写的,现在用循环链表操作写一下:
#include <stdio.h>#include <stdlib.h>typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;int n; void Build(LinkList &L){//建立,用头指针指向第一个结点LinkList p,cur;int i;printf("请输入人数:");scanf("%d",&n);p=(LinkList)malloc(sizeof(LNode));L=p;p->data=1;cur=p;for(i=2;i<=n;i++){p=(LinkList)malloc(sizeof(LNode));p->data=i;cur->next=p;cur=cur->next;}cur->next=L;}void Delete(LinkList &cur){//删除结点操作LinkList S;S=cur->next;cur->next=S->next;cur=S->next;printf("%d ",S->data);free(S);}void Joseph(LinkList L){//约瑟夫问题(数到3出局)int index=1;LinkList cur;cur=L;while(n!=1){if((index+1)%3==0){if(cur->next==L)L=L->next;Delete(cur);index=1;n--;}else{index++;cur=cur->next;}}printf("\n***剩下的人是第%d个人***\n",L->data);}void Display(LinkList L){//显示LinkList cur;cur=L;for(int i=1;i<=n;i++){printf("%d ",cur->data);cur=cur->next;}putchar('\n');}int main(){LinkList L;Build(L);Display(L);printf("出局顺序为:");Joseph(L);return 0;}
0 0
- 约瑟夫问题(数到3出局)----链表操作
- 约瑟夫问题(数到3的人出局,判断最后一个人是第几个)
- 数3出局(约瑟夫环)
- 低端约瑟夫问题解决(/5个人轮流报数,报到3的出局,求出局序列)
- 用链表解决淘汰出局问题(c++)
- 实验一:[链表操作]约瑟夫斯问题求解
- 数据结构与算法(4、约瑟夫环问题到循环链表)
- n个人围成一圈,从第1个人开始数数,数到3的人出圈,输出最后剩余的人编号(约瑟夫环问题)
- 约瑟夫问题(单向链表)
- 约瑟夫环问题(循环链表)
- 约瑟夫问题(循环链表)
- 约瑟夫问题(循环链表)
- 循环链表范例(约瑟夫问题)
- 约瑟夫环问题(循环链表)
- 约瑟夫问题(循环链表)
- 约瑟夫环问题(循环链表)
- 约瑟夫环问题(循环链表)
- 约瑟夫问题(循环链表实现)
- ztree (一)----初体验
- 面对对象思想6
- jQuery源码分析之jQuery.Event,$.stopImmediatePropagation,$.preventDefault,$.stopPropagation
- Java_基础_参数传递
- [算法]给定一个整型数组,找出能相加起来等于一个特定目标数字的两个数。
- 约瑟夫问题(数到3出局)----链表操作
- 数据库的事务ACID性质
- vim插件管理利器——vundle
- extern c
- ID3算法
- 剑指 offer:栈的压入、弹出序列
- JDBC连接数据库的步骤
- scala入门
- 单例模式的疑问