⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 1、猴子选大王 2、约瑟夫环 3、迷宫求解 4、回文游戏 5、地图四染色问题 6、八皇后问题 7、原四则表达式求值 8、k阶斐波那契序列 9、遍历二叉树 10、编写DFS算法的非递归
💻
字号:
// 约瑟夫.cpp : Defines the entry point for the console application.
//

//约瑟夫环问题
     //约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
		 //

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
	int num;
	int cipher;//密码
        struct node * next;
}LNode,* LinkList;


void main()
{
	LinkList R=NULL;
	int n,k;
	LinkList CreatList(int,LinkList);
	void SelectMan(int,int,LinkList);
	printf("输入总人数n和第一个报数k:");
	scanf("%d%d",&n,&k);
	R=CreatList(n,R);
	SelectMan(n,k,R);
}

LinkList CreatList(int n,LinkList R)
{
	LNode *p,*q;
	int i,data;
	R=q=(LNode *)malloc(sizeof(LNode));
	for(i=1;i<n;i++){
		p=(LNode *)malloc(sizeof(LNode));
		q->num=i;
		do{data=rand();}while(data==0);
				data=abs(data);
				data=data%10+1;
				q->cipher=data;
		q->next=p;
		q=p;
	}
	do{data=rand();}while(data==0);//随机报数
	data=abs(data);
	data=data%10+1;
	p->cipher=data;
	p->num=n;
	p->next=R;
	R=p;
	return R;
}


void SelectMan(int n,int k,LinkList R)
{
	int i,j;
	LNode *p,*q;
	p=R;
	for(i=1;i<n;i++){
		for(j=1;j<k;j++)
			p=p->next;
    
        
		q=p->next;
        k=q->cipher;//报密码
	p->next=q->next;
	
	
	printf("%4d:%2d",q->num,q->cipher);
	if(i%5==0)printf("\n");
	free(q);
	}
	printf("%4d:%2d",p->num,p->cipher);
	printf("\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -