约瑟夫环 c++ 循环输入
#include<iostream>
#include<string.h>
#include<cstdio>
#include <sstream>
using namespace std;
template <class T>
class joseph
{
struct node
{
T data;
node * next;
node():next(NULL) {}
node(T d):data(d),next(NULL) {}
};
private:
node * head;
node * cur;
node * pre; public:
joseph(T d);
int len = 0;
void setValue(T d)
{
node * tem = new node(d);
cur ->next = tem;
tem -> next = head;
cur = cur -> next;
pre = pre -> next;
len++;
}
void out()
{
pre -> next = cur -> next;
cout<<cur -> data<<" ";
delete cur;
cur = pre -> next;
len--;
}
void nextmove()
{
cur = cur -> next;
pre = pre -> next;
}
void init()
{
cur = cur -> next;
pre = pre -> next;
} };
//模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性)
template <class Type>
Type stringToNum(const string& str)
{
istringstream iss(str);
Type num;
iss >> num;
return num;
} template <class T>
joseph<T> :: joseph(T d)
{
head = new node(d);
node * fz = new node();
cur = head;
pre = fz;
pre -> next = head;
}
int main()
{
string z,x;
cout<<"please input n"<<endl;
cout<<"please input m"<<endl;
while(cin>>z>>x)
{
int a = 1 ;//为第一个节点赋值而创建的
int j = 0 ;//j为n的输入判断因子,当j=1时说明输入的n不是int型
int k = 0 ;//k为m的输入判断因子,当j=1时说明输入的n不是int型
joseph<int> dusk(a);//创建第一个节点,并调用构造函数把第一个节点赋值为1
dusk.len++;//链表长度加一
int n , m ;//n为人数,m为密码
int flag = 0;//是否继续
for(int i = 0 ; i < z.length() ; i++)//判断n是不是int型
{
if(z[i]<'0'||z[i]>'9')
{
cout<<"n input error"<<endl;
j = 1;
flag = 1;
break;
}
}
n = stringToNum<int>(z);//调用函数把string型的n转换成int型
for(int i = 0 ; i < x.length() ; i++)//判断m是不是int型
{
if(x[i]<'0'||x[i]>'9')
{
cout<<"m input error"<<endl;
k=1;
flag = 1;
break;
}
}
if(flag)
{
cout<<"please input n"<<endl;
cout<<"please input m"<<endl;
continue;
}
m = stringToNum<int>(x);//调用函数把string型的m转换成int型
if(n == 1)
{
cout << 1 << endl;
cout<<"please input n"<<endl;
cout<<"please input m"<<endl;
continue;
}
if(k==1||j==1)break;//判断因子有一个等于1说明:n,m有一个输入的不是int型,结束循环 for(int i = 2 ; i <= n ; i++)//初始化赋值
{
dusk.setValue(i);
}
dusk.init();//把cur指针指向head,把pre的next指向cur
while(dusk.len!=0)//长度不为0时循环
{
for(int i = 1 ; i < m ; i++)//移动
{
dusk.nextmove();
}
dusk.out();
}
cout<<endl;
cout<<"please input n"<<endl;
cout<<"please input m"<<endl;
} }
约瑟夫环 c++ 循环输入的更多相关文章
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- 循环列表的Java实现,解决约瑟夫环问题
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...
- 约瑟夫环(N个人围桌,C语言,数据结构)
约瑟夫环问题(C语言.数据结构版) 一.问题描述 N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推.最后留下的人获胜.(有很多类似问题,如猴子选代王等等, ...
- 约瑟夫环问题 --链表 C语言
总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出 #include <stdio.h>#include <s ...
- 约瑟夫环简介,问题以及java实现
问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...
- 约瑟夫环的C语言数组实现
约瑟夫环问题的具体描述是:设有编号为1,2,……,n的n个(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,才从他的下一个人起重新报数,报到m时停止报数,报m的出圈, ...
- 九度OJ 1189:还是约瑟夫环 (约瑟夫环)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:820 解决:522 题目描述: 生成一个长度为21的数组,依次存入1到21: 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每 ...
- 约瑟夫环问题(Josephus)
约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...
- Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)
1.Josephu(约瑟夫.约瑟夫环)问题: 设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_15_静态代码块
static的特殊用法, 静态代码块 加上构造方法,做测试 又创建一个对象 静态代码块 只执行一次 后续在学习jdbc的时候,静态代码块很有用途.
- altium学习之常用快捷键
1.放大缩小:常用方法,ctrl+鼠标滚轮,鼠标中键+移动鼠标,pgup.pgup. 2.切换不同的布线层:ctrl+shift+鼠标滚轮 3.在SCH或者PCB 同一平面内左右翻转:ctrl+X 4 ...
- 安全运维 - Linux系统攻击应急响应
Linux 应急相应 - 总纲 应急准备: 制定应急策略 组建应急团队 其他应急资源 安全事件处理: 痕迹数据获取 分析.锁定攻击源删除可疑账号关闭异常进程.端口禁用相应异常开机启动项删除异常定时任务 ...
- 使用 Spring HATEOAS 开发 REST 服务
使用 Spring HATEOAS 开发 REST 服务 学习博客:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/ htt ...
- [Python3] 012 元组:list,我们不一样!
目录 0. 元组的独白 1. 元组的创建 2. 元组的特性 (1) 概述 (2) 少废话,上例子 1) 索引 2) 分片 3) 序列运算 4) 成员检测 3. 元组的遍历 (1) 简单总结 (2) 少 ...
- MySQL的练习
mysql登录:方法1:使用Command Line Client登录,缺点:不显示报错信息 方法2:使用cmd登录(cmd的常用:查看ip地址:ipcongfi-----定时关机:shutdown ...
- adb logcat查看手机端日志
前言 做app测试,遇到异常情况,查看日志是必不可少的,日志如何输出到手机sdcard和电脑的目录呢?这就需要用logcat输出日志了以下操作是基于windows平台的操作:adb logcat | ...
- window.onload后跟函数 和跟函数名的区别【window.onload = asd() 和 window.onload = asd 】
window.onload:页面加载完毕执行[DOM tree + 外部图片 + 资源] <script> function asd(){ return 10; } window.onlo ...
- Python 特性?
1.Python 是强语言类型还是弱语言类型? Python 是强类型的动态脚本语言.强类型:不允许不同类型相加.动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候.脚本语言: ...
- SQL语句-exec执行
动态sql语句基本语法1 :普通SQL语句可以用Exec执行 eg: Select * fromtableName Exec('select * from tableName') ...