C++循环链表解决约瑟夫环问题,Qt编程
2013-10-30 11:20
561 查看
问题描述:
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
实现代码:
输入输出头文件
主函数
/******************************************************
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
实现代码:
输入输出头文件
#ifndef MYSTDINOUT_H #define MYSTDINOUT_H #include <QTextStream> static QTextStream cin(stdin); static QTextStream cout(stdout); #endif // MYSTDINOUT_H
包含约瑟夫环类的头文件
#ifndef JOSEPH_H #define JOSEPH_H #include "mystdinout.h" #include <QTextStream> //建立Joseph节点的结构体 struct JosephNode { JosephNode * Next; int Pos; }; //约瑟夫环类 class JosephRing { public: void CreatJR(); void Jose(); private: JosephNode * JR;//存放链表头指针 }; //建立约瑟夫环,单向循环链表 void JosephRing:: CreatJR() { JosephNode * head,* s, * r; int Num; cout<<"please input the Num of JosephRing:"<<endl; cin>>Num; head = new JosephNode; r = head; for(int i = 1; i<=Num; i++) { s = new JosephNode; s ->Pos = i; r ->Next = s; r = s; } r ->Next = head ->Next;//构成循环链表 JR = head;//链表头指针赋给对象头指针 } //删除节点,从第s个开始报数,报到m出列 void JosephRing:: Jose() { int s,m; cout<<"please input the start Num"<<endl; cin>>s; cout<<"please input period Num "<<endl; cin>>m; JosephNode * p; p = JR ->Next; JosephNode * q; for(int i = 1; i<=s-1; i++)//找到开始报数的人 { q = p; p = p->Next; } while(p ->Next != p) { for(int j = 1; j<= m-1; j++)//找到报m的人,删除节点 { q = p; p = p->Next; } cout<<p->Pos<<" "; q->Next = p->Next;//删除节点 delete p; p = q->Next;//从下一个开始计数 } cout<<p->Pos<<endl; } #endif // JOSEPH_H
主函数
/******************************************************
*Project:JosephRing约瑟夫环问题
*Author:yujiao
*Date:2013.10.24
*Input:总人数Num,第一个计数位置s,计数周期m
*Output:被清出的顺序
******************************************************/
#include <QCoreApplication> #include"Joseph.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); JosephRing MyJR;//初始化一个对象 MyJR.CreatJR();//输入总人数,建立循环链表 MyJR.Jose();//从第s个人开始计数,数到m的人被踢出 return a.exec(); }
运行结果演示
相关文章推荐
- 关于指针的一些事情
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型
- C++可变参数的实现方法