有一个数组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删除。



猜您在找 对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。 有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?(约瑟夫环) 初学者习题练习。从控制台输入一个数n,使用for循环实现求n! 提示:n! =n*(n-1)*(n-2)*…*1 升级:求1!+2!+3!+…+n!的值 Leetcode练习(Python):哈希表类:第202题:编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。 如果 n 是快乐数就返回 True ;不是,则返回 False 。 react 表单项动态删除,删掉的是最后一个,因为index for循环每隔一秒输出一个数字 有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号? awk打印第n个参数到最后一个技巧/将n行组成一列 合并两个有序链表,将两个升序链表合并为一个新的升序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 例如:输入 1->2->4,1->3->4->5,输出:1->1->2->3->4->4->5 #6 判断一个数是否为2的n次方
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM