首页 > 代码库 > 约瑟夫环 c++ 循环输入
约瑟夫环 c++ 循环输入
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #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; } } |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。