首页 > 试题广场 >

构造队列

[编程题]构造队列
  • 热度指数:17303 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:
while(!Q.empty())              //队列不空,执行循环
{
int x=Q.front(); //取出当前队头的值x
Q.pop(); //弹出当前队头
Q.push(x); //把x放入队尾
x = Q.front(); //取出这时候队头的值
printf("%d\n",x); //输出x
Q.pop(); //弹出这时候的队头
}
做取出队头的值操作的时候,并不弹出当前队头。
小明同学发现,这段程序恰好按顺序输出了1,2,3,...,n。现在小明想让你构造出原始的队列,你能做到吗?[注:原题样例第三行5有错,应该为3,以下已修正]

输入描述:
第一行一个整数T(T ≤ 100)表示数据组数,每组数据输入一个数n(1 ≤ n ≤ 100000),输入的所有n之和不超过200000。


输出描述:
对于每组数据,输出一行,表示原始的队列。数字之间用一个空格隔开,不要在行末输出多余的空格.
示例1

输入

4
1
2
3
10

输出

1
2 1
2 1 3
8 1 6 2 10 3 7 4 9 5
头像 白伟仝
发表于 2020-07-24 20:15:58
把 0~n-1 放到初始数组里面,按照题中队列操作输出后,逆下标映射即可: import java.util.*; public class Main { public static void main(String[] args) throws Exception{ Sca 展开全文
头像 喜乐有分享
发表于 2020-03-27 11:21:41
构造队列 ''' 原始操作: 第一步:弹出左边的元素插入右边 第二步:弹出左边的值 ''' from collections import deque k = int(input().strip()) # 获得数据的组数 whil 展开全文
头像 四月的清晨有点冷
发表于 2020-08-22 18:02:35
由原来的队列经过一系列操作后可以得到[1,2,3,4.....n]这样的队列,那么把所有的操作逆向回去,就能由[1,2,3,4,.....n]得到原来的队列。 from collections import deque T = int(input()) while(T): n = int 展开全文
头像 杨若晨
发表于 2021-07-29 21:05:51
import java.util.*; public class Main { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); 展开全文
头像 Ⅲ_Dc
发表于 2022-03-05 12:10:38
//用个map<int,int>或pair,按int 1...n顺序倒入队列,按题意算法模拟,给map【x】赋值再打印即可 ">#include<vector> #include<iostream> #include<stdio.h> #include 展开全文
头像 重生之我要当分子
发表于 2025-01-07 22:07:33
解题思路 通过模拟填数过程来构造队列: 从1开始依次填入数字 每次填数时跳过两个空位置 如果到达末尾则回到开头继续 直到所有数字都填入 关键点 循环查找空位置 处理数组边界 按顺序填入数字 代码 cpp java python #include <iostream&g 展开全文

热门推荐

通过挑战的用户

查看代码
构造队列