约瑟夫问题——猴子选大王 双向指针
2016-02-04 22:57
246 查看
题目大意:有N只猴子(编号为1~N)围成一圈,从第一只猴子开始数,数到第M只出列,直到只剩下一只猴子,打出这只猴子编号。
分析:这道题很显然是用指针做最简单。额~~~废话不多说(程序里会有注释),代码如下:
分析:这道题很显然是用指针做最简单。额~~~废话不多说(程序里会有注释),代码如下:
#include<stdio.h> #include<stdlib.h> struct node{ int a; //当前猴子的编号 struct node *l/*当前左边的那只猴子*/; struct node *r/*当前左边的那只猴子*/; node(){ a=0; //初始化 l=r=NULL; } }; struct node *h,*p,*q; //定义些临时指针 int main(){ int i,j,k,n,m; scanf("%d%d",&n,&m); //读入n,m h=new node; //new node是新建一个结构体 h->a=1; //h指向第一只猴子 p=new node; p=h; for (i=2;i<=n;i++){ //循环建立指针环 q=new node; q->a=i; //把q的编号设定为i q->l=p; //把q左指针设定为p p->r=q; //把p右指针设定为q p=p->r; //把p指针指向下一个 } p->r=h; //把p右指针设定为h h->l=p; //把h左指针设定为p h=h->l; //把h回退一个方便后面操作 while (h->r!=h){ for (i=1;i<=m;i++) h=h->r; //向后数m次 h->l->r=h->r; h->r->l=h->l; //同过调整指针指向来"让猴子出列" } printf("%d\n",h->a);//打出剩下的猴子的编号 system("pause>nul"); return 0; }
相关文章推荐
- Linux下mysql自动备份
- 热门搜索和历史搜索的设计思想
- 数学之路(机器学习实践指南)-文本挖掘与NLP(6)
- jQuery表单选择器
- 第14、15课Java数组与方法零基础编程实战课堂笔记
- 安卓开发——Paint类
- 在 JDK 9 中更简洁使用 try-with-resources 语句
- eclipse中使用maven插件的时候,运行run as maven build/clean的时候报错
- 享元模式
- 命令模式
- 百团纳新
- Android_Studio快捷键和使用技巧
- springboot配置文件加载不到的问题
- 关于python对于aspx网页的post提交
- 关于OpenCV3.1读取摄像头图像黑屏情况
- 基本算法——第六单元 回溯
- 组态王为什么一定要定义一个COM口?
- 《C#微信开发系列(2)-自定义菜单管理》
- Linux文件系统
- Android Material Design I-基础知识