数组模型解决:
问题思路:
解决这个问题的关键地方是怎么处理数到3的人,可以把这n个人放在一个数组中,对映下标的元素值为下标值加1,当数到3时将该下标的元素值设置为0,数组到头时重新开始,知道数组中只剩一个数为止。
数组模型解决:
#include <iostream>
#include<stdlib.h>
#define MAX 100
using namespace std;
int main()
{
cout << "Hello World!" << endl;
int arr[MAX]={0};
for(int i=0;i<MAX;i++)
{
arr[i]=i+1;
}
int i=0,j=0,k=0;
while(k<MAX-1)
{
if(arr[i]!=0)
{
j++;
}
if(j==2)
{
arr[i]=0;
j=0;
k++;
}
i++;
if(i==MAX)
i=0;
}
for(i=0;i<MAX;i++)
if(arr[i])
cout<<arr[i];
return 0;
}
链表模型解决:
解决思路:
利用STL中list容器,链表中每个节点的值为下标值加1,当数到3时,从链表中删除这个节点,直到节点数为1。
链表模型代码:
#include <iostream>
#include<list>
#define MAX 100
using namespace std;
int main()
{
list<int> v;
for(int i=0;i<MAX;i++)
{
v.push_back(i+1);
}
cout<<v.front()<<endl;
int j=0;
list<int>::iterator it=v.begin();
while(v.size()>1)
{
if(it!=v.end())
j++;
if(j==2)
{
it=v.erase(it);
j=0;
}
else
{
++it;
}
if(it==v.end())
it=v.begin();
}
cout<<v.front()<<endl;
return 0;
}
欢迎关注问我团队公众号: