首页 > 试题广场 >

操作序列

[编程题]操作序列
  • 热度指数:35578 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易有一个长度为 n 的整数序列,a_1,...,a_n。然后考虑在一个空序列 b 上进行 n 次以下操作:
1、将 a_i 放入 b 序列的末尾
2、逆置 b 序列
小易需要你计算输出操作 n 次之后的 b 序列。

输入描述:
输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。
第二行包括n个整数 ai (1 ≤ ai ≤ 10^9),即序列a中的每个整数,以空格分割。


输出描述:
在一行中输出操作 n 次之后的 b 序列,以空格分割,行末无空格。 
示例1

输入

4
1 2 3 4

输出

4 2 1 3
/*
         * 把这个题的思路整理一下,首先先判断所含有的字符串个数是奇数还是偶数
         * 如果是奇数,则把数组下表为偶数的元素按照数组标号由大到小排列,奇数下表从小到大排列
         * 如果是偶数,则把数组下表为奇数的元素按照数组标号由大到小排列,偶数下表从小到大排列
         */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Set;
import java.util.Stack;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main{
    public static void main (String[] args) throws IOException{
int i = 0; 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String a = bufferedReader.readLine();
        int n = Integer.parseInt(a);
        String[] s = bufferedReader.readLine().split(" ");
        if (s.length%2==0) {
             for(i=s.length-1;i>=0;i--) {
                     if (i%2==1) {
                      System.out.print(s[i]+" ");
                  }
                 }
               for(i=0;i<s.length;i++) {
                   
                   if (i%2==0) {
                       if (i==s.length-1||i==s.length-2) {
                        System.out.print(s[i]);
                    }else {
                        System.out.print(s[i]+" ");
                    }
                    
                }
               }
        }else {
            
             for(i=s.length-1;i>=0;i--) {
                 
                 if (i%2==0) {
                   
                      System.out.print(s[i]+" ");
                  
                  
              }
             }
             for(i=0;i<s.length;i++) {
                       if (i%2==1) {
                           if (i==0||i==1) {
                        System.out.print(s[i]);
                    }
                        else {
                          System.out.print(s[i]+" ");
                      }
                    }
                   }
             
        }
    }
}
发表于 2019-04-05 19:32:55 回复(0)
不需要逆序,找到输出的规律即可,一个间一个的输出
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        int num=Integer.parseInt(sc.nextLine());
        String[] s=sc.nextLine().split(" ");
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<num;i=i+2) {
            sb.append(s[num-i-1]+" ");
        }
        int j=0;
        if(num%2==0) {
            j=0;
        }else {
            j=1;
        }
        for(int i=j;i<num;i=i+2) {
            sb.append(s[i]+" ");
        }
        
        String str=sb.toString();
        String[] s2=str.split(" ");
        for(int i=0;i<num;i++) {
            if(i==num-1) {
                System.out.print(s2[i]);
                continue;
            }
            System.out.print(s2[i]+" ");
        }
        
    }

}
发表于 2019-03-25 21:25:59 回复(0)

按照题目的意思可以这样写
使用一个LinkedList保存数据,按照顺序分别从后和从前插入数据,之后按照插入数据的总数量,从前或者从后遍历输出就行了。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner s= new Scanner(System.in);
        int len = s.nextInt();
        LinkedList<Integer> list = new LinkedList<Integer>();
        for(int i=0;i<len;){
            list.add(s.nextInt());
            i++;
            if(i<len){
                list.addFirst(s.nextInt());
                i++;
            }
        }
        s.close();
        Iterator itr;
        if(len%2==0) itr = list.iterator();
        else itr = list.descendingIterator();
        if(itr.hasNext())System.out.print(itr.next());
        while(itr.hasNext()){
            System.out.print(" "+itr.next());
        }
    }
}
编辑于 2019-03-22 20:41:19 回复(2)
import java.util.Scanner;

public class Main {
    //方法1:将所有数保存在一个数组中,根据数组的长度进行规律地输出
    /*public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        
        int[] arr = new int[len];
        for(int i = 0; i < len; i++) {
            arr[i] = in.nextInt();
        }
        
        if(len%2 == 0) {
            for(int i = len-1; i >= 1; i = i-2) {
                System.out.print(arr[i]+" ");
            }
            for(int i = 0; i<= len-2; i = i+2) {
                System.out.print(arr[i]);
                if(i != len-2) {
                    System.out.print(" ");
                }
            }
        } else {
            for(int i = len-1; i >= 0; i = i-2) {
                System.out.print(arr[i]+" ");
            }
            for(int i = 1; i<= len-2; i = i+2) {
                System.out.print(arr[i]);
                if(i != len-2) {
                    System.out.print(" ");
                }
            }
            
        }
        
    }*/
    
    //方法2:将数组按照奇偶位置存放在两个数组中,再根据数组长度进行规律输出
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        int[] one;
        int[] two;
        if(len%2 == 0) {
            one = new int[len/2];//奇数位置序列
            two = new int[len/2];//偶数位置序列
        } else {
            one = new int[len/2];
            two = new int[len/2+1];
        }
        
        int i = 0; int j =0;
        
        for(; len>0; len = len-2) {
            two[i++] = in.nextInt();
            if(len != 1) {
                one[j++] = in.nextInt();
            }
        }
        
        if(len%2 == 0) {
            inverseprint(one);
            System.out.print(" ");
            correctprint(two);
        } else {
            inverseprint(two);
            System.out.print(" ");
            correctprint(one);
        }
        
    }
    
    private static void inverseprint(int[] arr) {
        for(int i = arr.length-1; i>= 0; i--) {
            System.out.print(arr[i]);
            if(i != 0) {
                System.out.print(" ");
            }
        }
    }
    
    private static void correctprint(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if(i != arr.length-1) {
                System.out.print(" ");
            }
        }
    }
}

发表于 2019-03-22 16:45:35 回复(0)
import java.util.Scanner;
public class Main {
      public static void main(String args[]) {
                    Scanner sc = new Scanner(System.in);
                    int n=sc.nextInt();
                    int a[]=new int[n];
                    boolean isOu=true;
                    for(int i=0;i<n;i++) {
                        a[i]=sc.nextInt();
                     }
                    if(n%2!=0) {
                        isOu=false;
                    }
                     for(int i=n-1;i>0;i=i-2) {
                            System.out.print(a[i]+" ");
                        }
                     for(int i=0;i<n-1;) {
                            if(i!=n-2)
                              System.out.print(a[i]+" ");
                            else 
                              System.out.print(a[i]);
                           if(i==0&&!isOu) {
                               i=i+1;
                            }
                           else {
                                i=i+2;
                            }
                       }
                    }

}
发表于 2019-03-21 18:04:20 回复(0)
import java.util.ArrayList;
 import java.util.Scanner;
 import java.util.Stack;
 public class Main {
 public static void main(String argc[]){
 Scanner in = new Scanner(System.in);
 int n =in.nextInt();
 int[] num =new int[n];
 for(int i=0;i<n;i++)
 num[i]=in.nextInt();
 ArrayList<Integer> result=myfun(num);
 for(int i=0;i<result.size();i++){
 System.out.print(result.get(i));
 System.out.print(" ");
 }
 }
 private static ArrayList<Integer> myfun(int[] num){
 ArrayList<Integer> result = new ArrayList<>(num.length);
 Stack<Integer> stack = new Stack<>();
 int i=0;
 while(true){
 result.add(num[i]);
 for (int j=0;j<result.size();j++){
 stack.push(result.get(j));}
 result.clear();
 while (!stack.isEmpty())
 result.add(stack.pop());
 i++;
 if(result.size()==num.length)
 break;
 }
 return result;
 }
 }

编辑于 2019-03-18 16:18:00 回复(0)
 import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        long[] array = new long[n];
        for(int i = 0; i < n; i++) {
            array[i] = scanner.nextLong();
        }
        if(n == 1) {
            System.out.println(1);
            return;
        }
        if(n == 2) {
            System.out.print("2 1");
            return;
        }
        List<Integer> result = new ArrayList<>(n);
        if(n % 2 == 0) {
            int tmp1 = n;
            while(tmp1 != 2) {
                result.add(tmp1);
                tmp1 -= 2;
            }
            result.add(2);
            int tmp2 = 1;
            while(tmp2 < n) {
                result.add(tmp2);
                tmp2 += 2;
            }
        } else {
            int tmp1 = n;
            while(tmp1 != 1) {
                result.add(tmp1);
                tmp1 -= 2;
            }
            result.add(1);
            int tmp2 = 2;
            while(tmp2 < n) {
                result.add(tmp2);
                tmp2 += 2;
            }
        }
        StringBuffer sb = new StringBuffer();
        result.stream().forEach(i -> sb.append(array[i - 1] + " "));
        System.out.print(sb.toString().trim());

    }
}

发表于 2019-03-06 11:33:58 回复(1)
import java.util.*;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            in.nextLine();
            String[] s = in.nextLine().split(" ");
            int[] a = new int[s.length];
            for(int i = 0;i < a.length;i++){
                a[i] = Integer.parseInt(s[i]);
            }
            int[] res = helper(a);
            int i = 0;
            for(int num : res){
                System.out.print(num);
                if(i == res.length) System.out.println();
                else System.out.print(" ");
            }
        }
    }
    public static int[] helper(int[] a){
        int[] res = new int[a.length];
        int i = 0,j = res.length - 1,k = a.length - 1;
        while(i <= j){
            res[i++] = a[k--];
            if(k > 0) res[j--] = a[k--];
        }
        return res;
    }
}


发表于 2019-01-12 14:55:07 回复(0)


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int tempint;
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int[] nums = new int[n];
            int[] temp = new int[n];
            for (int i = 0; i < n; i++) {
                nums[i] = in.nextInt();
            }
            if (n <= 2) {
                for (int i = 0; i < nums.length; i++) {
                    System.out.println(nums[i]);
                }
                System.out.print(nums.toString());
            } else if(n!=3){
                tempint = n / 2;
                temp[tempint] = nums[0];
                for (int i = 1, j = 1; i <= nums.length / 2; i++) {
                    temp[tempint - i] = nums[j++];
                    if (tempint + i != nums.length && j != nums.length)
                        temp[tempint + i] = nums[j++];
                }
                for (int i = 0; i < temp.length; i++) {
                    if (i + 1 != temp.length)
                        System.out.print(temp[i] + " ");
                    else
                        System.out.println(temp[i]);
                }
            }
            else{
                System.out.print(nums[2]+" ");
                System.out.print(nums[0]+" ");
                System.out.print(nums[1]);
            }
        }
    }
}
发表于 2018-03-25 21:00:53 回复(0)

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=Integer.parseInt(sc.nextLine());
    int[] arr=new int[n];
    for (int i = 0; i < arr.length; i++) {
        arr[i]=sc.nextInt();
    }
    StringBuffer sb =new StringBuffer();
    String s="";
    for (int i = 0; i < arr.length; i++) {
        if (((i+1)&1)==1) {
            s=s+arr[i]+"#";
        }else {
            s=arr[i]+"#"+s;
        }
    }
    sb.append(s);
    if ((n&1)==1) {
        sb.reverse();
        s=sb.toString();
    }
    String[] strArr = s.split("#");
    for (int i = 0; i < strArr.length; i++) {
        if (i==strArr.length-1) {
            System.out.print(strArr[i]);
            break;
        }
        System.out.print(strArr[i]+" ");
    }
}
}
为什么说我的程序输出格式有问题,只通过了30%,请大佬指教到底什么问题啊?!
发表于 2017-11-08 09:47:53 回复(0)
public class test4 {  public static void main(String[] args) {  Scanner scanner = new Scanner(System.in);  String h = scanner.nextLine();  String s=scanner.nextLine();  String[] arr = s.split("\\s+");  int j=arr.length-1;  int i;  if(arr.length%2==0){i=0;}//对于奇数和偶数的操作  else i=1;  //是偶数的操作  for (int k=0;k<arr.length;k++) {  if (j >=0) {  System.out.print(arr[j]+" ");  j = j-2;  }  if (j<0&&i<arr.length&&i!=arr.length-2){  System.out.print(arr[i]+" ");  i=i+2;  }  if (j<0&&i<arr.length&&i>=arr.length-2){  System.out.print(arr[i]);  i=i+2;  }  }  }  }
      

发表于 2017-10-14 12:59:35 回复(0)
这道题我直接使用二维数组,一个存奇数序号的数组,一个存偶数序号的数组,通过一个标志q来控制,
q =  q ^ 1;通过q来控制输出的顺序,所以不用真的逆序了(否则简直是灾难)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int[][] a = new int[2][100000];
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int q = 1;
int l = 0, r = 0;
for (int i = 0; i < n; i++) {
if (q == 0) {
a[0][l++] = sc.nextInt();
} else {
a[1][r++] = sc.nextInt();
}
q = q ^ 1;
}
for (int i = ((q != 1) ? (r - 1) : (l - 1)); i >= 0; i--)
System.out.print(a[q ^ 1][i]+" ");
for (int i = 0; i < ((q != 1) ? l : r); i++) {
System.out.print(a[q][i]);
if(i != ((q != 1) ? l : r) - 1)
System.out.print(" ");
}
sc.close();
}
}

发表于 2017-08-23 12:23:51 回复(0)