题目
工厂里有一些分拣物件的工作,其中一名工人的工作是将面前传送带上依次送来的n个物件按照物件上的标号分别放到向左、向右两条传送带上,奇数的向左,偶数的向右。直到这一批物件分拣完,组长检查无误后打包装箱。
身为组长的小明自知责任重大,每次工人分拣完后他都会立即停下传送带,从工人左侧传送带的最左端开始核查物件的标号,直到查到工人右侧传送带上最右端,以确认是否分拣正确。已知物件传送过来的顺序,小明希望你帮忙记录一个关于物件标号的数字序列,表示他应当核查到物件的顺序,以便迅速完成工作。
收起
输入
第一行输入一个数n,表示物件总数; 第二行输入n个数,表示依次送来的n个物件上的标号。
输出
输出一行n个数,表示小明应核查到的正确的物件顺序,以空格隔开。
数据范围
对于100%的数据,1≤n≤100000,0≤物件标号≤10^9;
输入样例
6 1 2 3 4 5 6
输出样例
1 3 5 6 4 2
PS:C真的比Java快好多,虽然Java的时间限制是C的三倍,但是测试一大就超时,改了好多次后发现,想要节省时间,就减少打印次数。
C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,*p;
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
{
scanf("%d",p+i);
}
for(int i=0;i<n;i++)
{
if(*(p+i)%2==1)
{
printf("%d ",*(p+i));
}
}
for(int i=n-1;i>=0;i--)
{
if(*(p+i)%2==0)
{
printf("%d ",*(p+i));
}
}
return 0;
}
Java:
import java.util.*;
public class testOne {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n,i,k,j;
StringBuilder sb=new StringBuilder();
n=input.nextInt();
int num[]=new int[n];
int numAft[]=new int[n];
for(i=0;i<n;i++)
{
num[i]=input.nextInt();
}
for(i=0,k=n-1,j=0;i<n;i++)
{
if((num[i]&0x1)==1)
{
numAft[j++]=num[i];
}else
{
numAft[k--]=num[i];
}
}
for(i=0;i<n;i++)
{
sb.append(Integer.toString( numAft[i]));
sb.append(" ");
}
System.out.println(sb);
input.close();
}
}