网易有道编程题:恢复队列
题目详情:给出一个含有n个元素的队列,其内容为1到n的无序整数,按照给定算法输出该队列,使得该队列依次输出1,2,3,…,n-1,n。
给定算法为:
void outque(queue<int> Q) {while (!Q.empty()) {int x = Q.front();Q.pop();Q.push(x);cout << Q.front() << " ";Q.pop();}
}
即每次将队首元素放到队尾,同时读取当前队首,并弹出丢弃。
现在要求输入T组整数,每一个整数n,输出对应的n的原本队列。如:
输入:
2
3 10
输出:
2 1 3
8 1 6 2 10 3 7 4 9 5
观察之后,发现其排列为每次空一个空格之后,插入。如n = 10
时:
0 1 0 2 0 3 0 4 0 5
0 1 6 2 0 3 7 4 0 5
8 1 6 2 0 3 7 4 9 5
8 1 6 2 10 3 7 4 9 5
代码如下:
#include <vector>
#include <iostream>
using namespace std;int main()
{int T;int n;cin >> T; while (T--){cin >> n;vector<int> res(n+1, 0);int i;int index1 = 1;int index2 = n;for (i = 1; i <= n; ++i){if(i+i<=n)res[i*2] = i;else{if (n%2 == 0){int j = index1;int zero = 0;for (j; ; ){ if (res[j] == 0 && zero < 1){zero++; if (i == n){res[j] = n; break;}j = (j == n-1 ? n : (j+1)%n);}else if (res[j] == 0 && zero == 1){res[j] = i; index1 = (j == n-1 ? n : (j+1)%n);break;}else{j = (j == n-1 ? n : (j+1)%n);}}}else{int j = index2;int zero = 0;for (j; ; ){ if (res[j] == 0 && zero < 1){zero++; if (i == n){res[j] = n; break;}j = (j == n-1 ? n : (j+1)%n);}else if (res[j] == 0 && zero == 1){res[j] = i;index2 = (j == n-1 ? n : (j+1)%n); break;}else{j = (j == n-1 ? n : (j+1)%n);}}}}}for (int i = 1; i <n; ++i){cout << res[i] << ' ';}cout <<res[n] << endl;}return 0;
}
今天总共三道编程题,估计都不难,我就做了这么一道,还没AC,丢人!
细节:
细节一:循环队列处理,j = (j == n-1 ? n : (j+1)%n);
,不能单纯地j = (j+1)%n;
,因为如果刚好处理到n位,则循环进入到0,而题目没有将0考虑在内。
细节二:如果按照n的奇偶性分别处理,那么在进入第二轮的时候的起点位置不一样。其实应该大可不必,懒得改了。
算了,弱渣就这样吧。
估计这不是好的算法思路,只是将答案解出来了。
毕业和工作,前途堪忧。
网易有道编程题:恢复队列相关推荐
- 小学生计算机编程题,真题|小学组倒数第二道编程题,做不出来罚你点赞三遍!...
原标题:真题|小学组倒数第二道编程题,做不出来罚你点赞三遍! 十年前,当我们还是小学生的时候,碰到电脑你们都会干什么? 是熟练地在网址栏输入www.4399.com,然后一个接一个的点开网页小游戏,还 ...
- 51信用卡两道编程题
51信用卡两道编程题 1>输入一串字符,判断第二个字符串的字符是否都存在于第一个字符串,返回true,否则false,两个串中间有;号连接 如输入: ABCNB51;51NB 输出:true 解 ...
- 全国计算机二级编程题100道,计算机二级C语言100道编程题
国家计算机二级100道编程题 #include #include int fun(int score[], int m, int below[]) { int i,k=0; float av=0.0; ...
- 滴滴2016.09.06校招 在线笔试 - 2道编程题
滴滴2016.09.06校招 在线笔试 - 2道编程题 1.连续子数组的最大和 题目描述 一个数组有N个元素,求连续子数组的最大和.例如:[-1,2,1],和最大的连续子数组为[2,1],其和为3. ...
- 1000道Python题库系列分享十二(9道编程题)
上期题目连接:1000道Python题库系列分享十一(9道) 上期题目答案: 本期题目: ---------董付国老师Python系列教材-------- 1)<Python程序设计(第2版)& ...
- 1000道Python题库系列分享21(11道编程题:内置函数专项练习)
本期题目,答案在文末: 温馨提示 进入公众号,通过菜单"最新资源"==>"历史文章"可以快速查看分专题的文章列表,通过"最新资源"== ...
- 网易校招基础编程题——计算炮击次数
据说是校招的一道编程题,解题思路很简单,只需要一点基础的数学知识,但是需要注意测试样例有多组. 只需要简单的计算欧氏距离,与炮台射程进行比较即可. 代码实现如下: #include <iostr ...
- java基础50道编程题
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...
- Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; ...
最新文章
- 超重磅 | 神策数据“两云一平台”上线,拥抱数字化经营
- 热门解读:大促的活动设计及效果评估的优化
- windows winrar 指令_【转】winrar命令行详解
- 显示外部页面_前端设计-响应式页面开发基础
- 蓝牙小电池图标_方寸间、掌握中,omthing小方盒开箱测评
- php中解析数组,在PHP中解析多维数组
- jeecg自定义datagrid查询
- 基于element-ui,vue的html随机点名器
- LeetCode 1073. 负二进制数相加(负数进制)
- oracle 找不到程序,Oracle 找不到监听程序
- linux挂载iso镜像文件_Linux服务器如何识别移动硬盘?
- 战地5离线bot模式_战地系列、烂橘子平台下载更新慢咋办?我这里有两个亲测有有效的方式。...
- MyBatis使用Map
- silverlight4 开发必备
- c语言心算抢答系统,心算抢答系统2.doc
- yasm linux gcc,yasm安装出现问题
- 计算机怎样保存文件格式,word文档怎样保存为pdf格式
- 前端开发和html5,Web前端和HTML5前端相同吗 有区别吗
- GetPrivateProfileString函数之新手上路
- MariaDB 版本