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

📄 joseph.cpp

📁 约瑟夫环问题: 设编号为1
💻 CPP
字号:
#include "stdafx.h"
#include <stdio.h>

#define   N   7

struct NUM
{
	int number;
	int password;
	struct NUM *next;
}num[N+1],*head;

void Initiate()          //对链表初始化
{
    head = &num[0];      //num[0]是头节点
    num[0].number = N;   //num[0].number记录未出列人数
	num[0].next = &num[1];

	for(int i=1;i<N;i++)
	{
        num[i].number = i;
		printf("请输入第%d个人的密码:\t",i);
		scanf("%d",&num[i].password );
		num[i].next = &num[i+1];
	}

	num[N].number = N;
	num[N].next = &num[1];
	printf("请输入第%d个人的密码:\t",N);
	scanf("%d",&num[N].password );
}

void Find_report(int m)         //出列过程
{
	struct NUM *p;
	p = head;

	while(num[0].number!=0)
	{
		for(int i=1;i<m;i++)//p指向出列的人的前一个人,则p->next指向要出列的人
			p=p->next;
        
		printf("%d  ",p->next->number);  //输出要出列的人的号码

	    m = p->next->password ;         //记录新密码
		p->next=p->next->next;          //去除出列的人
		num[0].number = num[0].number-1;//未出列人数减1
	}
}

void main()
{
	int m=20;

    Initiate();              //对链表初始化
    Find_report(m);	        //依次找出出列的人并输出
}

⌨️ 快捷键说明

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