您的位置:首页 > 编程语言

华为2016研发工程师编程题(1)----删数

2016-05-03 16:39 302 查看
转载请注明出处</article/7845876.html>

问题:

有一个数组a
顺序存放0-N,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。

以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

输入描述:

每组数据为一行一个整数n(小于等于1000),为数组成员数,如100,则对a[999]进行计算。

输出描述:

一行输出最后一个被删掉的数的原始下标位置。

输入例子:

8

输出例子:

6

方法一:

#include<iostream>
#include<vector>

using std::vector;
using std::cout;
using std::cin;
using std::endl;

int main()
{
vector<int> vec;
int num;
while (cin >> num)
{
//载入数据
for (int i = 0; i < num; i++)
vec.push_back(i);

int i = 0;
auto it = vec.begin();
//循环依次删除满足条件的数据,直至容器中还剩下最后一个元素
while (vec.size() != 1)
{
if ((i + 1) % 3 == 0)
it = vec.erase(it);//返回被删除元素的下一个元素的迭代器
if ((i + 1) % 3 != 0)
it++;
i++;

if (it == vec.end())//关键所在
it = vec.begin();
}

/*for (auto c : vec)
cout << c << endl;*/
cout << vec[0] << endl;
vector<int>().swap(vec);		//别忘了清空容器
}
return 0;
}
注意:这种方法存储元素肯定不能用数组,因为数组是固定大小的,无法删除其中的元素来改变大小。

方法二:

待续...

转载请注明出处</article/7845876.html>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: