首页 > 试题广场 >

队列组合排序

[编程题]队列组合排序
  • 热度指数:1309 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

一个班级男生和女生数量相同,老师要求男生女生进行排队,男生全部排在队列前面,女生紧跟着排在男生队列后面,形成一个队列,现在要求男生女生交叉排列并且第一位是男生,且每个人在在原队列中的顺序不变,如何来做?

 

要求:

交叉前:队列[1,男2,男3,男4…n,女1,女2,女3,女4…n]

交叉后:队列[1,女1,男2,女2,男3,女3,男4,女4…n,女n]


输入描述:
输入第一行一个整数 n 表示有 n 个男生和 n 个女生
第 2 到第 n+1 行每一行有一个数字表示每个男生的编号
第 n+2 到第 2*n+1 行每一行有一个数字表示每个女生的编号


输出描述:
输出 2*n 行,每行一个名字表示交叉排列后队列中依次每个学生的编号
示例1

输入

3
1
2
3
4
5
6

输出

1
4
2
5
3
6

说明

男【1,2,3】+女【4,5,6】。交叉后变为:【1,4,2,5,3,6】

备注:
每个学生的标号互不相同,并且标号 x 满足:

将前n个值和后n个值分别存入两个数组A,B,用一个变量记录2n个数,序号为偶数输出A数组,序号为奇数输出B数组。
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {		
		Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int size = 2*n;
        ArrayList<Integer> list = new ArrayList<Integer>(2*n);
        int[] arr = new int[n];
        int[] brr = new int[n];
        for (int i = 0; i <n; i++) {
			arr[i] = sc.nextInt();
		}
        for (int i = 0; i <n; i++) {
			brr[i] = sc.nextInt();
		}
        for (int i=0,j=0,k=0; k<size;k++) {
			if(k%2==0) {//偶数位
				System.out.println(arr[i]);
				i++;
			}
			else {
				System.out.println(brr[j]);
				j++;
			}
			
		}
        sc.close();
	}

}

发表于 2020-03-09 17:26:10 回复(0)
def sort():
    get_input = []
    while True:
        try:
            get_input.append(int(input()))
        except:
            break
    nums = get_input[0]
    student = get_input[1:]
    for i in range(0, int(len(student)/2)):
        print(student[i])
        print(student[i + nums])


if __name__ == '__main__':
    sort()

发表于 2020-03-23 18:54:09 回复(2)
while True:
    try:
        n = int(input())
        x = []
        y = []
        for i in range(n):
            x.append(int(input()))
        for i in range(n):
            y.append(int(input()))
        for i in range(n):
            print(x[i])
            print(y[i])
    except:
        break

编辑于 2020-04-09 17:55:03 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] result=new int[2*n];
        for(int i=0;i<n;i++){
            result[i*2]=sc.nextInt();
        }
        for(int i=0;i<n;i++){
            result[i*2+1]=sc.nextInt();
        }
        for(int i:result){
            System.out.println(i);
        }
    }
}

不用两个数组倒腾来倒腾去,直接一个结果数组,男生下标是i*2,女生是i*2+1就行

发表于 2020-03-17 11:27:25 回复(1)
while True:
    try:
        n = int(input())
        res = []
        for _ in range(2*n):
            res.append(int(input()))
        for i in range(n):
            print(res[i])
            print(res[i+n])
    except:
        break

发表于 2020-09-04 18:34:37 回复(0)
不考虑时间实现,献丑了
input_number = int(input("输入数字n\n"))
person_number = 2 * input_number

person_number_list = list(range(1, person_number + 1))
print("交叉排列前:")
for i in person_number_list:
    print(i)

boy_list = person_number_list[:input_number]
girl_list = person_number_list[input_number:]

cross_list = [None] * person_number
boylist_index = [b * 2 for b in range(input_number)]
girllist_index = [(g * 2) - 1 for g in range(1, input_number + 1)]

for b, boy_num in zip(boylist_index, boy_list):
    cross_list[b] = boy_num

for g, girl_num in zip(girllist_index, girl_list):
    cross_list[g] = girl_num

print(f'男生索引是{boylist_index},女生索引是{girllist_index},交叉后变为{cross_list}')


发表于 2023-08-12 15:58:08 回复(0)
lst = []
try:
    while True:
        lst.append(int(input()))
except:
    pass
s = lst[0]
for i in range(1,s+1):
    print(lst[i],lst[i+s], sep="\n")

编辑于 2023-02-11 09:57:46 回复(0)
Python3解法
n = int(input())
que = []
for i in range(2*n):
    que.append(int(input()))
for i in range(n):
    print(que[i])
    print(que[i+n])
发表于 2021-07-26 10:12:09 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[2*n+1];
    for(int i=1;i<=n;i++){
        cin>>a[2*i-1];
    }
    for(int i=1;i<=n;i++){
        cin>>a[2*i];
    }
     for(int i=1;i<=2*n;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}
发表于 2020-08-28 10:29:01 回复(0)
你们就没考虑内存连续问题吗,如果内存碎片比较多,怎么能分配那么大块连续内存,这道题应该用链表
发表于 2020-08-20 15:06:14 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[n],b[n],c[2*n];
    for(int i=0;i<n;i++){
        int val;
        cin>>val;
        a[i]=val;
    }
    for(int i=0;i<n;i++){
        int val;
        cin>>val;
        b[i]=val;
    }
    for(int i=0;i<2*n;i++){
        if(i%2==0){
            c[i]=a[i/2];
        }
        else{
            c[i]=b[(i-1)/2];
        }
    }
    for(int i=0;i<2*n;i++){
        cout<<c[i]<<endl;
    }

}

发表于 2020-08-14 16:46:41 回复(0)
n = int(input())
s = []
for i in range(2*n):
    s = s + [int(input())]
for i in range(n):
    print(s[i])
    print(s[i + n])
为啥超时呀,真奇怪
发表于 2020-08-10 09:48:34 回复(0)
n=int(input())
boy=[]
girl=[]
for i in range(n):
    boy.append(int(input()))
for i in range(n):
    girl.append(int(input()))
for i in range(n):
    print(boy[i])
    print(girl[i])

发表于 2020-08-05 10:42:09 回复(0)
import sys
data = [] while True:
    line = sys.stdin.readline().strip()
    data.append(line) if not line:
        data.pop() break number = int(data[0])
mix = data[1:]
new = []
boy = mix[:number]
girl = mix[number:] for i in range(number): print(boy[i]) print(girl[i])
发表于 2020-07-20 14:31:24 回复(0)
在虚拟机中允许成功的,可能还有点瑕疵和冗余,没仔细改
#!/usr/bin/python
#_*_coding:utf-8_*_

if __name__ == '__main__':
        number = raw_input("请输入学生数量:")
        number = int(number)
        stu_id = []
        final_id = []
        print "请输入学生编号,男生女生各%d个"%(number)
        for i in range(2*number):
                num = raw_input()
                stu_id.append(num)
                final_id.append("")

        boy_id = 0
        for stu in range(number):
                final_id[boy_id] = stu_id[stu]
                final_id[boy_id+1] = stu_id[stu+number]
                boy_id += 2

        print "交叉之后的结果为:"
        for new_id in final_id:
                print new_id
发表于 2020-06-10 12:26:39 回复(0)
在自己的编译器上没问题,但是在这里就好多出不来

#include <iostream>
#
include <string>
#include <vector>  
using namespace std;
int main()
{
 int n;
 cin>>n;
 int all[n];
 int boy[n];
 for (int i = 0; i < 2*n; i++)
 {
        cin >>all[i];
    }
    for (int k = 0,j=0; k < 2*n; j++)
 {
        boy[k]=all[j];
  k+=2;
  if(k==2*n)
  {
   k=1;
  }
  
    }
   for (int i = 0; i < 2*n; i++)
 {
        cout<<boy[i]<<endl;
    }
    return 0;
}
发表于 2020-03-12 13:43:24 回复(0)
#include <iostream>
(933)#include <string>
#include <vector>
usingnamespacestd;
 
int main() {
    int a,i;
    cin>>a;
    int boy[a];
    int girl[a];
    for(i=0;i<a;i++){
        cin>>boy[i];
    }
    for(i=0;i<a;i++){
        cin>>girl[i];
    }
    for(i=0;i<2*a;i++){
        if(i%2==0)
            cout<<boy[i/2]<<endl;
        else
            cout<<girl[int(i/2)]<<endl;
    }
    return0;
}
发表于 2020-03-11 21:18:53 回复(0)