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

📄 joseph.cpp

📁 约瑟夫环,&#61548 任务:编号是1
💻 CPP
字号:
#include<iostream>
using namespace std;
struct node
{
	int code;
	int id;
	node * next;
}head;//head 为头节点,有头结点的链表比较好控制
int main()
{
	int m,n;
	cout<<"请输入初始值m:"<<endl;
	cin>>m;
	cout<<"请输入人数n:"<<endl;
	cin>>n;
	head.code = -1;
	head.next = NULL;
	cout<<"请输入每个人的密码,并以空格隔开:"<<endl;
	//输入说明和出入初始数据
	node * p = &head ;//建立一个指针p指向头结点
    for(int i = 0; i < n; ++i)
	{
		node * s = new node;
		cin>>s->code ;
		s->id = i+1;
		s->next = NULL;
		p->next = s;
		p = s;		
    }
	//循环出入每个人的密码并且依次连接到链表上
    p->next = head.next ;//将尾指针指向头节点的下一个节点(即第一个人)
    while(p->next != p)//当只剩下一个节点的时候不必循环,直接输出即可
	{
	    for(int i = 0; i< m-1; ++i)
		p=p->next ;
		//循环找出目标节点
		node *q = p->next;
        p->next = q->next ;
		m = q->code ;
		cout<<q->id<<" ";
		delete q;
		//删除目标节点并连接该节点的前后节点
    }
	cout<<p->id<<endl;//输出最后一个人的密码
    system("pause");
	return 0;
}

⌨️ 快捷键说明

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