有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

// ConsoleApplication12.cpp : 定义控制台应用程序的入口点。
//

include "stdafx.h"

// ConsoleApplication12.cpp : 定义控制台应用程序的入口点。
//

include

include

using namespace std;

void print(vector vec)
{
for (int i = 0;i < vec.size();++i)
{
cout << vec[i] << " ";
}

}
int main()
{
vector sources;
vector temp;
int num;
int flag;
cin >> num;
if (num > 1000)
{
flag = 1000;
num = 1000;
}
else
{
flag = num;
}

while (flag != 0)
{

flag--;
sources.push_back(flag);//从大到小存数据

}

//循环终止条件
int i = sources.size()-3;
int deleteNum= 0;//记录删除节点的个数
temp = sources;

while (sources.size() != 1)
{

// temp.clear();

num = 0;
while (i>=0)
{
temp.erase(temp.begin() + i );
i = i -3 ;
}

//cout << "sources:"; print(sources);cout << endl;
// cout << "temp:"; print(temp);cout << endl;

if (i== -1)
{
i = temp.size()-1;

}
else if (i == -2)
{
i = temp.size() - 2;
}
else
{
i = temp.size() - 3;

}
sources = temp;

}

cout << sources[0] << endl;

return 0;
}

//注意:遇到中循环删除指针的问题,可以倒着删除

posted @ 2017-02-22 17:03  wdan2016  阅读(5466)  评论(1)    收藏  举报