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

来源:互联网 发布:高三励志语录知乎 编辑:程序博客网 时间:2024/04/28 06:37

转载请注明出处<http://blog.csdn.net/qianqin_2014/article/details/51305537>


问题:

有一个数组a[N]顺序存放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;}
注意:这种方法存储元素肯定不能用数组,因为数组是固定大小的,无法删除其中的元素来改变大小。

方法二:

待续...



转载请注明出处<http://blog.csdn.net/qianqin_2014/article/details/51305537>

0 0
原创粉丝点击