zoukankan      html  css  js  c++  java
  • 有一个数组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;
    }
    
    //注意:遇到中循环删除指针的问题,可以倒着删除
  • 相关阅读:
    HDU 4452 模拟
    CSUFT2016ACM训练赛4
    HDU 4445 纯物理题+枚举
    HDU 4442 排队贪心
    2016中国大学生程序设计竞赛
    POJ 2239 化二分图右集合二维为一位的最大匹配
    学习数据库必须掌握的54条SQL查询语句
    jsp+连接MYSQL5.1
    查看MYSQL 端口
    J2EE+struts2+helloworld调试问题解决方法
  • 原文地址:https://www.cnblogs.com/wdan2016/p/6429818.html
Copyright © 2011-2022 走看看