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)
还没有任何评论哟~
