P1996 约瑟夫问题
2037:【例5.4】约瑟夫问题
1748:约瑟夫问题
3.2数据结构之指针和链表 1748:约瑟夫问题
2746:约瑟夫问题
3254:约瑟夫问题No.2
C++参考代码一:
#include <iostream>
using namespace std;
struct node
{
long d;
node *next;
};
long n,m;
node *head,*p,*r;
int main()
{
long i,j,k,l;
cin>>n>>m; //8 5
head=new node;
head->d=1;
head->next=NULL;
r=head;//r为尾指针
for (i=2;i<=n;i++)
{
p=new node;
p->d=i;
p->next=NULL;
r->next=p;
r=p;
}
r->next=head;
r=head;
for (i=1;i<=n;i++)//n=8 m=5
{
for (j=1;j<=m-2;j++) r=r->next;
cout<<r->next->d<<" ";
r->next=r->next->next;
r=r->next;
}
return 0;
}
C++参考代码二:
/*
P1996 约瑟夫问题
https://www.luogu.com.cn/problem/P1996
*/
/*
2037:【例5.4】约瑟夫问题
http://ybt.ssoier.cn:8088/problem_show.php?pid=2037
1748:约瑟夫问题
http://noi.openjudge.cn/ch0302/1748/
总时间限制: 1000ms 内存限制: 65536kB
描述
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:
0 0
输出
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
样例输入
6 2
12 4
8 3
0 0
样例输出
5
1
7
*/
#include<iostream>
using namespace std;
int n,m,s,f,t,x=0;
bool a[1301]; //根据题意开出数组大小
int b[1301];
int main()
{
cin>>n>>m; //共n人,报到m出圈
//cout<<endl;
for (t=1;t<=n;++t) a[t]=false; //等同于memset(a,0,sizeof(a)),要调用cstring库
f=0;
t=0;
s=0; //刚开始所有变量默认值也是0,或者用f=t=s=0;
//int temp;
do
{
++t; //逐个枚举圈中的所有位置
if (t==n+1) t=1; //数组模拟环状,最后一个与第一个相连
if (a[t]==false) ++s; //第t个位置上有人则报数
if (s==m) //当前报的数是m
{
s=0; //计数器清零
cout<<t<<" "; //输出出圈人的编号
a[t]=true; //此处的人已出圈,设置为空
f++; //出圈的人数增加一个
}
} while(f!=n);
//cout<<t<<endl;
//b[++x]=t;
//直到所有的人都出圈为止
for(int i=1;i<=x;i++)
{
cout<<b[i]<<endl;
}
return 0;
}
信息学奥赛寒假、暑假、国庆十一假期 如何进行集训
2022年暑期及9月份CSP-J1 CSP-S1初赛 培训计划及学习要点
2022年暑期及9月份CSP-J1 CSP-S1初赛 培训计划及学习要点_dllglvzhenfeng的博客-CSDN博客
CSP-J1 CSP-S1 第1轮 初赛 相关在线测试网站
CSP-J CSP-S NOI初赛
CSP-J CSP-S NOIP历年真题
CSP-J CSP-S复赛
国内顶尖信息学奥赛名校训练模式有感
已经上了好几年C++课程,为何还是做不出信息学奥赛的题?