题目就不说了,学过算法或者看过一些编程思维故事的人应该都有了解这个经典的问题。这里直接看代码和运行结果。
#include <bits/stdc++.h>
using namespace std;
int n,m;
int main()
{
while(cin>>n>>m)
{
int man[n]= {0};
int count=1,i=0,pos=-1,alive=0;
while(count<=n)
{
do
{
pos=(pos+1)%n;
if(!man[pos])
i++;
if(i==m)
{
i=0;
break;
}
}
while(1);
man[pos]=count;
count++;
}
cout<<"最初位置--约瑟夫环位置\n";
for(i=0; i<n; i++)
{
cout<<i+1<<"-"<<man[i]<<" ";
if(i!=0&&i%10==0)
cout<<endl;
}
cout<<"输入剩下的人数?"<<endl;
cin>>alive;
alive=n-alive;
for(i=0; i<n; i++)
{
if(man[i]>alive)
cout<<"初始序号:"<<i+1<<" 约瑟夫环序号:"<<man[i]<<endl;
}
}
return 0;
}


本文深入探讨了经典的约瑟夫环问题,通过C++代码实现,展示了如何计算在特定规则下最后存活者的原始位置与约瑟夫环位置的对应关系,特别关注于算法细节与运行结果。
8613

被折叠的 条评论
为什么被折叠?



