有一个数组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<iostream>
#include<vector>
using namespace std;

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

}
int main()
{
	vector<int> sources;
	vector<int> 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  阅读(5323)  评论(1编辑  收藏  举报