1. #include<iostream>
  2. #include<string.h>
  3. #include<cstdio>
  4. #include <sstream>
  5. using namespace std;
  6. template <class T>
  7. class joseph
  8. {
  9. struct node
  10. {
  11. T data;
  12. node * next;
  13. node():next(NULL) {}
  14. node(T d):data(d),next(NULL) {}
  15. };
  16. private:
  17. node * head;
  18. node * cur;
  19. node * pre;
  20.  
  21. public:
  22. joseph(T d);
  23. int len = 0;
  24. void setValue(T d)
  25. {
  26. node * tem = new node(d);
  27. cur ->next = tem;
  28. tem -> next = head;
  29. cur = cur -> next;
  30. pre = pre -> next;
  31. len++;
  32. }
  33. void out()
  34. {
  35. pre -> next = cur -> next;
  36. cout<<cur -> data<<" ";
  37. delete cur;
  38. cur = pre -> next;
  39. len--;
  40. }
  41. void nextmove()
  42. {
  43. cur = cur -> next;
  44. pre = pre -> next;
  45. }
  46. void init()
  47. {
  48. cur = cur -> next;
  49. pre = pre -> next;
  50. }
  51.  
  52. };
  53. //模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性)
  54. template <class Type>
  55. Type stringToNum(const string& str)
  56. {
  57. istringstream iss(str);
  58. Type num;
  59. iss >> num;
  60. return num;
  61. }
  62.  
  63. template <class T>
  64. joseph<T> :: joseph(T d)
  65. {
  66. head = new node(d);
  67. node * fz = new node();
  68. cur = head;
  69. pre = fz;
  70. pre -> next = head;
  71. }
  72. int main()
  73. {
  74. string z,x;
  75. cout<<"please input n"<<endl;
  76. cout<<"please input m"<<endl;
  77. while(cin>>z>>x)
  78. {
  79. int a = 1 ;//为第一个节点赋值而创建的
  80. int j = 0 ;//j为n的输入判断因子,当j=1时说明输入的n不是int型
  81. int k = 0 ;//k为m的输入判断因子,当j=1时说明输入的n不是int型
  82. joseph<int> dusk(a);//创建第一个节点,并调用构造函数把第一个节点赋值为1
  83. dusk.len++;//链表长度加一
  84. int n , m ;//n为人数,m为密码
  85. int flag = 0;//是否继续
  86. for(int i = 0 ; i < z.length() ; i++)//判断n是不是int型
  87. {
  88. if(z[i]<'0'||z[i]>'9')
  89. {
  90. cout<<"n input error"<<endl;
  91. j = 1;
  92. flag = 1;
  93. break;
  94. }
  95. }
  96. n = stringToNum<int>(z);//调用函数把string型的n转换成int型
  97. for(int i = 0 ; i < x.length() ; i++)//判断m是不是int型
  98. {
  99. if(x[i]<'0'||x[i]>'9')
  100. {
  101. cout<<"m input error"<<endl;
  102. k=1;
  103. flag = 1;
  104. break;
  105. }
  106. }
  107. if(flag)
  108. {
  109. cout<<"please input n"<<endl;
  110. cout<<"please input m"<<endl;
  111. continue;
  112. }
  113. m = stringToNum<int>(x);//调用函数把string型的m转换成int型
  114. if(n == 1)
  115. {
  116. cout << 1 << endl;
  117. cout<<"please input n"<<endl;
  118. cout<<"please input m"<<endl;
  119. continue;
  120. }
  121. if(k==1||j==1)break;//判断因子有一个等于1说明:n,m有一个输入的不是int型,结束循环
  122.  
  123. for(int i = 2 ; i <= n ; i++)//初始化赋值
  124. {
  125. dusk.setValue(i);
  126. }
  127. dusk.init();//把cur指针指向head,把pre的next指向cur
  128. while(dusk.len!=0)//长度不为0时循环
  129. {
  130. for(int i = 1 ; i < m ; i++)//移动
  131. {
  132. dusk.nextmove();
  133. }
  134. dusk.out();
  135. }
  136. cout<<endl;
  137. cout<<"please input n"<<endl;
  138. cout<<"please input m"<<endl;
  139. }
  140.  
  141. }

  

约瑟夫环 c++ 循环输入的更多相关文章

  1. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  2. 循环列表的Java实现,解决约瑟夫环问题

    import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...

  3. 约瑟夫环(N个人围桌,C语言,数据结构)

    约瑟夫环问题(C语言.数据结构版) 一.问题描述 N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推.最后留下的人获胜.(有很多类似问题,如猴子选代王等等, ...

  4. 约瑟夫环问题 --链表 C语言

    总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出 #include <stdio.h>#include <s ...

  5. 约瑟夫环简介,问题以及java实现

    问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...

  6. 约瑟夫环的C语言数组实现

    约瑟夫环问题的具体描述是:设有编号为1,2,……,n的n个(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,才从他的下一个人起重新报数,报到m时停止报数,报m的出圈, ...

  7. 九度OJ 1189:还是约瑟夫环 (约瑟夫环)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:820 解决:522 题目描述: 生成一个长度为21的数组,依次存入1到21: 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每 ...

  8. 约瑟夫环问题(Josephus)

    约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...

  9. Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)

    1.Josephu(约瑟夫.约瑟夫环)问题: 设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m ...

随机推荐

  1. 解决Chrome网页编码显示乱码的问题

    解决Chrome网页编码显示乱码的问题 记得在没多久以前,Google Chrome上面出现编码显示问题时,可以手动来调整网页编码问题,可是好像在Chrome 55.0版以后就不再提供手动调整编码,所 ...

  2. UDP 首部的格式

    <图解TCP/IP>6.6 UDP首部的格式 源端口号:表示发送端端口号,字段长16位.该字段是可选项,有时可能不会设置源端口号.没有源端口号的时候该字段的设置为0.可用于不需要返回的通信 ...

  3. Java 基础-类与面向对象

    类 Object 类(java.lang.Object)是所有 Java 类的直接或间接父类. 成员方法及变长参数 方法定义: [public | protected | private] [stat ...

  4. redis集群主从中断,报io过高 不错

    问题原因:1.由于这个集群redis操作非常频繁,1分钟操作数据达到1-2G,所有自动aof非常频繁,主从复制打包rdb也非常频繁,之前配置已经无法满足要求报异常如下6943:M 19 Jul 20: ...

  5. K近邻实现

    1 定义画图函数,用来可视化数据分布 (注:jupyternotebook来编写的代码) import matplotlib.pyplot as plt import numpy as np %con ...

  6. 剑指offer--day01

    1.1题目:二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断 ...

  7. 解锁 HTTPS原理

    From今日头条:https://www.toutiao.com/a6534826865792647693/?tt_from=weixin&utm_campaign=client_share& ...

  8. 20190906 On Java8 第十八章 字符串

    第十八章 字符串 +的重载与StringBuilder 用于String的+与+=是Java中仅有的两个重载过的操作符,Java不允许程序员重载任何其他的操作符.编译器自动引入了java.lang.S ...

  9. React入门教程1---初见面

    React入门教程1---初见面:https://blog.csdn.net/solar_lan/article/details/82799248 React 教程 React 是一个用于构建用户界面 ...

  10. 最长回文子序列/最长回文子串(DP,马拉车)

    字符子串和字符子序列的区别 字符字串指的是字符串中连续的n个字符:如palindrome中,pa,alind,drome等都属于它的字串 而字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符: ...