Advertisement

2018北邮计算机院机试真题

阅读量:

2018北邮计算机院机试真题(回忆版,答案仅供参考)


由同学回忆整理得知,今年北邮机试考试题目发布后,并附上了自己的解答.(可能存在一些未考虑到的细节,如有发现任何问题欢迎留言交流 ) 实在抱歉打扰了…

Problem A

题目:

将输入的数据范围从0提升到2,并进一步提升至32次方;随后对该数值进行转换为二进制形式;随后对该二进制序列进行倒转处理;最后将其转译为十进制数值

复制代码
    测试数据:
    2
    输出:
    1
    
    
      
      
      
      
      
    
    AI写代码
复制代码
    测试数据:
    10  
    输出:5
    
    
    
      
      
      
      
      
    
    AI写代码

java代码

复制代码
    import java.util.Scanner;
    public class Main_com_01 {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        String str = Long.toBinaryString(n);
        long num = 0;
        for(int i=str.length()-1;i>=0;i--) {
            num += (long)Integer.parseInt((str.charAt(i)+"")) * Math.pow(2, i);
        }
        System.out.println(num);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

ProblemB

题目:生成图像的数字编码(类似的题目类型可能因缺乏标准的输入格式而难以处理,特别是在没有提供参考样例的情况下)

输入:

0-9任意一个数字

输出:

输出对应的5*3的图像数字。

复制代码
    测试数据:
    2
    
    输出:
    111
    001
    111
    100
    111
    
      
      
      
      
      
      
      
      
      
    
    AI写代码

java代码

复制代码
    import java.util.Scanner;
    public class Main_com_02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] digit = new int[5][3];
        int num = sc.nextInt();
        if(num == 0) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==4||j==0||j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 1) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 2) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||(j==2 && i<=2)||(j==0 && i>=2)) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 3) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 4) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==2||j==2||(j==0&&i<=2)) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 5) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||(j==0 && i<=2)||(j==2 && i>=2)) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 6) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||(j==2 && i>=2)||j==0) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 7) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else if(num == 8) {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||j==0||j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }else {
            for(int i = 0;i<5;i++) {
                for(int j = 0;j<3;j++) {
                    if(i==0||i==2||i==4||(j==0&&i<=2)||j==2) {
                        digit[i][j] = 1;
                    }
                }
            }
            print(digit);
        }
    
    }
    
    public static void print(int[][] digit) {
        for(int i = 0;i < 5;i++) {
            for(int j = 0;j < 3;j++) {
                System.out.print(digit[i][j]);
            }
            if(i!=4) {
                System.out.println();
            }
        }
    }
    
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

ProblemC

寻找满足以下条件的一个有序数组序列:其质因数分解后的因子数量至少为8个;给定整数值n(假设为正整数),返回该序列的第n项元素;其中序列的最大索引不超过十万。

复制代码
    测试数据:
    1
    输出:
    256   (因为2^8 = 256)
    
      
      
      
      
    
    AI写代码

java代码(这是种无脑的遍历解法,肯定超时了,求大佬评论优化解法)

复制代码
    import java.util.Scanner;
    public class Main_com_03 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int i, x, count=0,num=0,fin=0;
        x=sc.nextInt();
        for(int k=2;k<100000000;k++) {
            count = 0;
            fin = k;
            int n = k;
            for (i=2;i<=n;i++){
                while (n!=i){
                    if(n%i==0) {
                        n = n / i;
                        count++;
    
                    }
                    else break;;
                 }
             }
             count++;
             if(count >= 3) {
                 num++;
             }
             if(num == x) {
                 break;
             }
        }      
        System.out.println(fin);               
    }       
    }
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

ProblemD

题目:

由0和1组成的字符串中,请找出这样一个最长子串:其中包含相等数量的0和1字符。(据说该方法的时间复杂度非常紧张)对于规模较大的数据来说(比如n达到O(n^2)级别),直接暴力的方法显然无法满足要求。

复制代码
    测试数据
    01001
    输出
    1001   
    
      
      
      
      
    
    AI写代码

java代码

复制代码
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    public class Main_com_04 {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int sum = 0;
        int temp_len = 0;
        int final_index1 = 0;
        int final_index2 = 0;
        map.put(0, 0);
        for(int i=0;i<str.length();i++) {
            if(str.charAt(i) == '1') {
                sum++;
                map.put(i+1, sum);
            }else {
                sum--;
                map.put(i+1, sum);
            }
        }
    
        List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {   
            public int compare(Map.Entry<Integer, Integer> x1, Map.Entry<Integer, Integer> x2) {      
                return (x1.getValue()).compareTo(x2.getValue());
            }
        });
    //      System.out.println(list);
        Map<Integer, ArrayList<Integer>> map1 = new HashMap<Integer, ArrayList<Integer>>();
        for(Map.Entry<Integer,Integer> mapping:list){ 
            if(map1.containsKey(mapping.getValue())) {
                map1.get(mapping.getValue()).add(mapping.getKey());
            }else {
                ArrayList<Integer> x = new ArrayList<Integer>();
                x.add(mapping.getKey());
                map1.put(mapping.getValue(), x);
    
            }
        }       
        for (ArrayList arr : map1.values()) {
            if((int)arr.get(arr.size()-1) - (int)arr.get(0) > temp_len) {
                temp_len = (int)arr.get(arr.size()-1) - (int)arr.get(0);
                final_index1 = (int)arr.get(0);
                final_index2 = (int)arr.get(arr.size()-1);
            }
    //            System.out.println(arr);
            }
    
        System.out.println(str.substring(final_index1, final_index2));  
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

版权声明:转载注明 <>

全部评论 (0)

还没有任何评论哟~