BUPT2018计院软院机试Java题解

题目搜集于各位前辈,侵删。

第一题

二进制数字调转
题目描述:一个2^32的数字n,将其转换成二进制数,再倒转,求
倒转的二进制数对应的十进制数。
例如:
123
0000 0000 0000 0000 0000 0000 0111 1011
1101 1110 0000 0000 0000 0000 0000 0000
3724541952
举例:
输入:123
输出:3724541952

import java.util.Scanner;
//注意long、补0即可,签到题
public class s1801 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int t=0;t<T;t++) {
			long n = sc.nextLong();
			String s1 = "";
			while(n>0) {
				if(n%2==0) {
					s1 = "0"+s1;
				}else {
					s1 = "1"+s1;
				}
				n/=2;
			}
			while(s1.length()!=32) {
				s1 = "0"+s1;
			}
			String s2 = new StringBuffer(s1).reverse().toString();
			long k = 1;
			long ans = 0;
			for(int i =s2.length()-1;i>=0;i--) {
				if(s2.charAt(i)=='1') {
					ans+=k;
				}
				k*=2;
			}
			System.out.println(ans);
		}
		sc.close();
	}

}

第二题

在这里插入图片描述

//莫名其妙的题,9到底带不带勾呢
import java.util.Scanner;

public class c1802 {

	static String[][] num = {
			{   "111",//0
				"101",
				"101",
				"101",
				"111"
			},
			{   "010",//1
				"010",
				"010",
				"010",
				"010"
			},
			{   "111",//2
				"001",
				"111",
				"100",
				"111"
			},
			{   "111",//3
				"001",
				"111",
				"001",
				"111"
			},
			{   "101",//4
				"101",
				"111",
				"001",
				"001"
			},
			{   "111",//5
				"100",
				"111",
				"001",
				"111"
			},
			{   "111",//6
				"100",
				"111",
				"101",
				"111"
			},
			{   "111",//7
				"001",
				"001",
				"001",
				"001"
			},
			{   "111",//8
				"101",
				"111",
				"101",
				"111"
			},
			{   "111",//9
				"101",
				"111",
				"001",
				"111"
			},
	};
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		for(int i = 0;i<5;i++) {
			for(int j = 0;j<s.length();j++) {
				char c = s.charAt(j);
				System.out.print(num[c-'0'][i]);
			}
			System.out.println();
		}
		sc.close();
	}
}

第三题

在这里插入图片描述

/*
 * 先算出小于10000的所有素数,
 * 然后从2开始判断,
 * 判断方法就从素数集合里面挨个找,每次找出一个再从头找
 */
import java.util.ArrayList;
import java.util.Scanner;

public class c1803 {

	static ArrayList<Integer> prime;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		initPrime();//算出小于10000的素数集
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int t=0;t<T;t++) {
			int n = sc.nextInt();
			int i = 0;
			int k = 2;
			while(i<n) {
				if(ok(k)){
					i++;
				}
				k++;
			}
			System.out.println(k-1);
			
		}
		sc.close();
	}
	
	static void initPrime() {
		prime = new ArrayList<Integer>();
		for(int i = 2;i<=10000;i++) {
			int flag = 1;
			for(int j = 2;j<i;j++) {
				if(i%j==0) {
					flag = 0;
					break;
				}
			}
			if(flag == 1) {
				prime.add(i);
			}
		}	
	}
	
	static boolean ok(int k) {
		int count = 0;
		while(true) {
			int flag = 1;//用于判断是否遍历一遍
			for(int i = 0;i<prime.size();i++) {
				if(k%prime.get(i)==0) {
					count++;
					k/=prime.get(i);
					flag = 0;
				}
				if(count == 8) {
					return true;
				}
			}
			if(flag == 1) {
				return false;
			}
		}
	}
}

第四题

在这里插入图片描述

import java.util.Arrays;
import java.util.Scanner;
/*
 * 数量级太大
 * n^2肯定是不行了
 * 看得大佬的思路:
 * 顺序遍历一次,看见0就减1,看见1就加1,
 * 如果前n项是0,那么直接比较之
 * 如果不是,那么存储,算一下前n项和相同的下标之差,比较之
 */
public class c1804 {
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int t=0;t<T;t++) {
			String s = sc.next();
			int[] num = new int[100000];//num[k]存储前n项第一次为k的下标
			Arrays.fill(num, -1);
			int maxSub = 0;
			int temp = 0;
			for(int i = 0;i<s.length();i++) {
				if(s.charAt(i)=='0') {
					temp--;
				}else {
					temp++;
				}
				if(temp==0) {
					maxSub = Math.max(maxSub, i+1);
				}else {
					if(num[temp] == -1) {
						num[temp] = i;
					}else {
						maxSub = Math.max(maxSub, i-num[temp]);
					}
				}
			}
			System.out.println(maxSub);
		}
		sc.close();
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1 类的定义、对象数组的使用 1. 定义一个学生类(Student), 属性有 1)非静态属性String studentNumber 2)非静态属性String studentName 3)非静态属性int markForMaths 4)非静态属性int markForEnglish 5)非静态属性int markForScience 方法有: 1)构造方法Student(String number, String name) 2)构造方法Student() 3)String getNumber() 4)String getName() 5)void enterMarks(int markForMaths, int markForEnglish, int markForScience) 6)int getMathsMark() 7)int getEnglishMark() 8)int getScienceMark() 9)double calculateAverage() 10)String toString() 返回学生信息,包括学号、姓名、数学成绩、英语成绩、科学成绩、平均成绩。 注意:为了保证calculateAverage返回double类型,需要把三个分数的和除以3.0,而不是3. 另外,分数的初始值是什么?如果每个分数初始值为0,会造成混淆,分数为0表示还没有输入分数,还是分数确实为0?有更好的初始值吗? 编写Student类,并且编写一个StudentTest类,对Student类进行测试。 StudentTest类运行效果如下: 请输入学生学号:2011211301 请输入学生姓名:王晓 请输入学生三门课成绩(数学,英语,科学):88,79,90 学生信息如下: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 2.定义一个StudentList类用来存储Student对象 属性有 1)Student[] list; //list存储学生对象 2)int total; //学生总人数 方法有: 1)StudentList(int length) //length是数组长度 2)boolean add(Student stu) //增加stu到数组中,成功,返回true,否则false 3)boolean remove(int no) //删除第no个数组元素,删除成功,返回true,否则false 4)boolean remove(Student number) //删除学号为number的学生,删除成功,返回true,否则false 5)boolean isEmpty() //判断数组是否为空,若是,返回true,否则false 6)Student getItem(int no) //返回第no个学生 7)Student getItem(Student number) //返回学号为number的学生,若该生不存在,返回null。 8) int getTotal() 返回学生总人数 编写StudentList类,并且编写一个StudentListTest类,对StudentList类进行测试。 StudentListTest类运行效果: 菜单如下,请输入 1~8代表您要执行的操作: 1. 增加1个学生 2. 根据学号删除学生 3. 根据位置删除学生 4. 判断是否为空 5.根据位置返回学生 6.根据学号返回学生 7. 输出全部学生信息 8.退出程序 请输入您的操作:1 请输入学生信息: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 ---目前有1个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 请输入您的操作:1 学号:2011211311 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 ---目前有2个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:5 请输入学生位置:10 对不起,没有对应的学生 请输入您的操作:5 请输入学生位置:2 学生信息如下: 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:3 请输入要删除第几个学生:2 删除成功 ---目前有1个学生,信息为:
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值