编程练习2
约瑟夫环问题,从某个人开始报数,到某个数,该人出列,继续从下一个开始,直到全部人员出列
1 #include <iostream> 2 using namespace std; 3 4 void Joseph(int n,int m,int s) 5 { 6 int i,j=n; 7 int k=s-1,tmp; 8 int a[20]={0}; 9 for(i=0;i<n;++i) 10 a[i]=i+1; 11 12 while(n>=2) 13 { 14 k=(k+m-1)%n; 15 tmp=a[k]; 16 for(i=k;i<n-1;++i) 17 { 18 a[i]=a[i+1]; 19 } 20 a[i]=tmp; 21 n--; 22 } 23 for(i=j-1;i>=0;--i) 24 cout<<a[i]; 25 } 26 int main() 27 { 28 for(int i=0;i<10;++i) 29 cout<<i+1; 30 cout<<endl; 31 32 Joseph(10,3,2); 33 34 cout<<endl; 35 return 0; 36 }
开始考虑用单链表,双链表,最后还是觉得数组来的简单,不过如果环很大时,数组的效率是很低的
思想的高度决定事情的成败!
浙公网安备 33010602011771号