主题:题目是:用数组求解约瑟夫问题
题目是:用数组求解约瑟夫问题,有N个小孩围在一起按顺时钟报数,报到M的小孩从圈子中离开,然后从下一个小孩开始报数,每报到M相应的小孩从圈子中离开,最后一个离开圈子的人为胜者,问胜者是哪一个小孩?
#include<iostream>
using namespace std;
const int N=20,M=5;
int main()
{int children[N],count=1,children_remaind=M,i=0;
for(i=0;i<N;i++)
children[i]=i+1;
while(children_remaind>1)
{for(i=0;children_remaind>1;i++,count++)
{if(count==M)
{for(int m=i;m<children_remaind-1;m++)
children[m]=children[m+1];
children_remaind--;
}
count=1;
if(i>=children_remaind-1)
i=0;
}
}
cout<<" the winner is No."<<children[0]<<endl;
}
本篇来自:http://www.021-12580.org
#include<iostream>
using namespace std;
const int N=20,M=5;
int main()
{int children[N],count=1,children_remaind=M,i=0;
for(i=0;i<N;i++)
children[i]=i+1;
while(children_remaind>1)
{for(i=0;children_remaind>1;i++,count++)
{if(count==M)
{for(int m=i;m<children_remaind-1;m++)
children[m]=children[m+1];
children_remaind--;
}
count=1;
if(i>=children_remaind-1)
i=0;
}
}
cout<<" the winner is No."<<children[0]<<endl;
}
本篇来自:http://www.021-12580.org