有一個數組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;
}

//注意:遇到中循環刪除指針的問題,可以倒着刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM