SzNOI c002 约瑟夫循环

这题题目没怎么弄清,不知道循环旋转的时候从哪开始,也就不想了,写个简答的约瑟夫循环

#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 ;
}
时间: 2024-08-04 14:53:48

SzNOI c002 约瑟夫循环的相关文章

JavaCodeTra 猴子选猴王 约瑟夫循环

之前用的是循环链表,java刚学,不知道怎么用链表,用个小算法吧 代码: import java.util.Scanner; /** * */ /** * @author john * @约瑟夫循环/MonkeyKing */ public class MonkeyKing { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.pr

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

循环单向链表(约瑟夫环)

#include <stdio.h> #include <stdlib.h> typedef struct List { int data; struct List *next; }List; //创建循环单向链表n为长度 List *list_create(int n) { List *head, *p; int i; head = (List *)malloc(sizeof(List)); p = head; p->data = 1; //创建第一个结点 for (i =

JAVA程序设计(13.1)---- 循环 数组 应用复习,约瑟夫环问题

1.今天基本上上课是复习以前的哦 作业约瑟夫环,30个人围成一圈,从一个人开始数数1,下一个人数 2,数到9的就( ^_^ )/~~拜拜,出局,后面一个人继续数1.....问剩下15个人都是基督徒吗?额--不对--剩下15个人都站在什么位置.用一个数组就解决了--初始化都是0,出局的就赋值1,循环到1的时候不计数,每9个0,最后一个0就变成1,直到出局15人. package com.lovo.josephu; /** * 类:约瑟夫环站位 * @author Abe */ public cla

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

循环单链表,解决约瑟夫问题

约瑟夫问题: 编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数),开始任选一个正整数作为报数上限值M,从第1个人按顺时针方向自1开始顺序报数,报到M时停止报数.报M的人出列,将他的密码作为新的M值,从他顺时针方向上的下一个人开始从1报数,如此下去,直至所有人全部出列为止. 解析: 显然当有人退出圆圈后,报数的工作要从下一个人开始继续,而剩下的人仍然围成一个圆圈,因此可以使用循环单链表.退出圆圈的工作对应着表中节点的删除操作,对于这种删除操作频繁的情况,选用效率较高的链表结构,为

循环列表|约瑟夫问题

本文出自:http://binhua.info/datastructure/%E5%BE%AA%E7%8E%AF%E9%93%BE%E8%A1%A8%E7%BA%A6%E7%91%9F%E5%A4%AB%E7%8E%AF 在单链表或者双链表中,最后一个节点的指针指向头结点就形成了循环列表,这样使链表首尾相连从任意一个节点出发都可以找到其他节点.循环列表的操作和非循环列表差不多就不啰嗦了,只要记住循环链表首尾相连就OK了(好废话...).代码中用循环链表解决了约瑟夫问题.代码鲁棒性不是很强,仅仅用

使用java的循环单向链表解决约瑟夫问题

什么是约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而Josephus 和他的朋友并不想遵从.首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人.接着,再越过k-1个人,并杀掉第k个人.这

约瑟夫问题(一堆数据每隔几循环取出)

function question($arr) { global $outStr; global $b; foreach($arr as $key=>$val) { if(($key+1)% $b == 0) { unset($arr[$key]); array_push($outStr,$val); } else { unset($arr[$key]); array_push($arr,$val); } } return $arr; } //约瑟夫问题 $a = array('a','b','