这题题目没怎么弄清,不知道循环旋转的时候从哪开始,也就不想了,写个简答的约瑟夫循环
#include<iostream>
using namespace std ;
struct LinkNode {
	LinkNode  *link ;
	int data ;
} ;//dingyi 
void CreatList (LinkNode *first,int number) {
//	LinkNode *first ;*first ;
	LinkNode *current = first ;
//	int number ;
//	int m1 ;
//	int m2 ;
//	cin >> number ;
//	cin >> m1 ;
//	cin >> m2 ;
	for(int i =1 ;i < number  ;i++ ){
		//create 
		current->data = i ;
		LinkNode *newNode =new LinkNode ;
		current->link = newNode ;
		current = newNode ;
	}
	current->data = number  ;
		current->link = first ;
}
void print(LinkNode *first ) {
		//int i= 0;
		while (first != NULL) {
			cout << first ->data << endl; 
			//i++;
			first = first->link ;
		}
		//cout <<i;
	}
void Josephus (LinkNode *first,int number,int m1 ) {
	LinkNode *pre =NULL ;
	int i ;
	int j ;
	int arr[number] ;
	for(int k=1 ;k<=8;k++) {
		arr[k] =k ;
	}
	for(i=1 ;i<number  ;i++) {
	
			for(j=1;j<m1;j++) {
				pre = first ;
				first = first->link  ;
		}
		cout <<"the out number  is " <<first->data <<endl;
			for(int g=1;g<=8 ;g++) {
				if(first->data == arr[g] ) {
					arr[g] =0 ;
			}
		}  
			pre->link =first->link ;
			delete first ;
			first =pre ->link ;
		
	
	} 
	//cout the answer ;
	for(int a =1 ;a<=8;a++ ) {
		if(arr[a] !=0) {
			cout << "the final is " ; 
			cout <<arr[a] <<endl;
			break ;
		}
	}
 
}
int main () {
	LinkNode *first = new LinkNode ;
	//first->data = 100 ;
	//first->link = NULL ;
	int number ,m1 ,m2 ;
	cin >> number ;
	cin >> m1 ;
	CreatList (first , number ) ;
	Josephus (first ,number , m1) ;
	cout <<endl ;
//	cin >> m2 ;
//
	return 0 ;
}
原文:http://blog.csdn.net/hhooong/article/details/43093573