华为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
方法一:
方法二:
待续...
转载请注明出处</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>
相关文章推荐
- Spring mvc 入门搭建一
- java的接口和抽象类
- c#匿名类型
- matlab(figure和subplot)title text figure标题的使用技巧
- java 类的加载和反射介绍
- thinkphp 操作mysql遇到的坑。
- InstallUtil.exe报错,错误代码HRESULT: 0x80131515
- Visual studio C#语言输出调试信息到Output窗口方法
- eclipse如何复制大量的get方法
- java下载文件
- DW快速去除tppabs冗余代码
- SpringMVC中使用Interceptor拦截器
- eclipse如何把文本文件在命令行输入
- eclipse_32位的Eclipse无法和64位的jdk搭配使用
- python常用代码
- Spring--AOP--面向切面编程
- 打飞机代码学习感想
- 【转】JAVA 中 BIO, NIO, AIO 的理解
- MFC C++ Format 16进制输出时需要注意的一点
- php命名空间使用详解(转载)