N个人围成一个圈,从第1个人开始报数,没数到三,则这个人就要自杀,然后后面的人接着报数,怎么使得有M个人存活下来。
#include <iostream>
using namespace std;
#define N 41
#define M 3
int main(void)
{
int man[N] = {0};
int count = 1;
int i = 0,pos = -1;
int alive = 0;
while(count <= N){
do{
pos = (pos + 1) % N;
if (man[pos] == 0)
{
i++;
}
if (i == M)
{
i = 0;
break;
}
}while(1);
man[pos] = count;
count++;
}
cout<<"Joseph arrangement: "<<endl;
for (int i = 0; i < N; i++)
{
cout<<man[i]<<' ';
if ((i + 1)%10 == 0)
{
cout<<endl;
}
}
cout<<endl;
cout<<"the number of people you want secure:"<<endl;
cin>>alive;
cout<<"the L represent the living."<<endl;
for (int i = 0; i < N; i++)
{
if (N - man[i] < alive)
{
cout<<"L";
}
else{
cout<<"D";
}
if ((i + 1)%5 == 0)
{
cout<<" ";
}
}
cout<<"\nfinish";
return 0;
}