前言
今天主要学习了有关数据结构部分的知识点:链表、栈、并查集、二叉堆。
一、约瑟夫问题
题目背景
主要代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<stack>
#include<list>
#include<queue>
#include<iterator>
using namespace std;
queue<int> q1;
int n,m,flag=0;
int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9')
{
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
return x;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
q1.push(i);//模拟队列
}
while(!q1.empty())
{
flag++;
if(flag!=m)
{
q1.push(q1.front());//先把head压进队尾
q1.pop();//再把head删除
}
else
{
flag=0;
cout<<q1.front()<<" ";//先输出
q1.pop