- 前言
最近参加了一场线上的笔试,大概七条编程题,两条sql题,这边整理记录下,如果有错误希望大家可以指出交流下,或者有更好的方法也希望大家可以分享下。
- 写一个验证掷骰子概率的程序,同时投掷2颗6面骰子n次,计算其和得到各数字的概率。
/**
* 写一个验证掷骰子概率的程序,同时投掷2颗6面骰子n次,计算其和得到各数字的概率。
* @author Y
* @date 2020/3/24
*/
public class Exercise1 {
public static void main(String[] args) {
fun(100);
}
public static void fun(int n) {
Random random = new Random();
//用一个map去存放运行记录
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
int num1 = random.nextInt(6)+1;
int num2 = random.nextInt(6)+1;
int sum = num1 + num2;
map.put(sum,map.get(sum) == null ? 1 : map.get(sum)+1);
}
//遍历计算概率
Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
for (Map.Entry<Integer,Integer> entry:entries) {
Integer key = entry.getKey();
double sum = entry.getValue();
double probability = sum / n;
System.out.println("和为:"+key+" 出现的概率为:"+probability);
}
}
}
- 编写程序解决以下问题:长度为N的数组,随机放入值为1-50中间的任意整数,请编写程序找出其中的偶数数字,并按照该数字在数组中出现次数从多到少排序输出。
/**
* 编写程序解决以下问题:长度为N的数组,随机放入值为1-50中间的任意整数,
* 请编写程序找出其中的偶数数字,并按照该数字在数组中出现次数从多到少排序输出。
* @author Y
* @date 2020/3/24
*/
public class Exercise2 {
public static void main(String[] args) {
int[] ints = generateArray(100);
Map<Integer, Integer> map = new TreeMap<>();
for (int i = 0; i < ints.length; i++) {
int num = ints[i];
map.put(num, map.get(num) == null? 1 : map.get(num) + 1);
}
//按照value升序输出
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Integer, Integer>>(){
//重写compare方法
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
System.out.println(list);
}
//生成数组
public static int[] generateArray(int n) {
if (n <= 0)
throw new IllegalArgumentException("illegal param");
int[] array = new int[n];
Random random = new Random();
for (int i = 0; i < n; i++) {
array[i] = random.nextInt(50)+1;
}
return array;
}
}
- 编写程序列出一个目录下所有的文件,包括所有子目录下的文件,并打印出文件总数。
/**
* 编写程序列出一个目录下所有的文件,包括所有子目录下的文件,并打印出文件总数。
* @author Y
* @date 2020/3/24
*/
public class Exercise3 {
//这边在外面定义一个记录文件数的变量
private static int sum = 0;
public static void main(String[] args) {
File file = new File("D:\\logs");
fun(file);
System.out.println(sum);
}
public static void fun(File file) {
File[] files = file.listFiles();
for (File file1:files) {
if (file1.isDirectory()) {
fun(file1);
} else {
System.out.println(file1.getName());
sum++;
}
}
}
}
- 有一张班级学生表有3个字段分别为学生姓名:STUDENT、性别:GENDER、身高:STATURE。请编写程序为该班学生排座位,规则如下:
1)教室共4排座位,每个座位都可以坐2人(有同桌)
2)身高矮的同学坐在前排,身高高的坐后面
3)同桌必须为同性别同学,若同性别人员为奇数,只允许最后一排位置一个人坐
这题没写。。。。
- 找出这样的数字:一个数字等于它的各分解项相加。示例数字 28可分解为1、2、4、7、14,1+2+4+7+14=28。同样,数字6分解为:1、2、3,1+2+3=6。用代码找出1-500以内的所有符合这样条件的数字。
/**
* 找出这样的数字:一个数字等于它的各分解项相加。示例数字 28可分解为1、2、4、7、14,1+2+4+7+14=28。
* 同样,数字6分解为:1、2、3,1+2+3=6。用代码找出1-500以内的所有符合这样条件的数字。
* @author Y
* @date 2020/3/24
*/
public class Exercise5 {
public static void main(String[] args) {
for (int i = 1; i < 500; i++) {
int sum = 0;
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0)
sum += j;
}
if (i == sum)
System.out.println(i);
}
}
}
- 请编写一个函数,能将字符串main-action-holder,转换为mainActionHolder
/**
* 请编写一个函数,能将字符串main-action-holder,转换为mainActionHolder
* @author Y
* @date 2020/3/24
*/
public class Exercise6 {
public static void main(String[] args) {
String str = "main-action-holder";
System.out.println(fun(str));
}
public static String fun(String str) {
if (str == null || str.equals(""))
throw new IllegalArgumentException("illegal param");
String[] split = str.split("-");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++) {
if (i == 0) {
sb.append(split[i]);
} else {
//截取字符串
sb.append(split[i].substring(0,1).toUpperCase()+split[i].substring(1));
}
}
return sb.toString();
}
}
- 简单实现在线购买电影票,请重点考虑多人同时购买一个座位的情况,可以使用伪代码
/**
* 简单实现在线购买电影票,请重点考虑多人同时购买一个座位的情况,可以使用伪代码
* @author Y
* @date 2020/3/24
*/
public class Exercise7 {
private static int total_count = 100;
private static int remain_count = 100;
private static int sold_count = 0;
public synchronized static void buyMovieTickets(int count) {
if (count < 0 || count > remain_count)
throw new IllegalArgumentException("illegal param remain count is"+ remain_count);
remain_count = remain_count - count;
sold_count = sold_count + count;
String str = "电影票总量:"+total_count+" 已卖出:"+sold_count+" 剩余:"+remain_count;
System.out.println(str);
}
public static void main(String[] args) {
Thread t1 = new Thread() {
@Override
public void run() {
buyMovieTickets(20);
}
};
Thread t2 = new Thread() {
@Override
public void run() {
buyMovieTickets(30);
}
};
Thread t3 = new Thread() {
@Override
public void run() {
buyMovieTickets(80);
}
};
t1.start();
t2.start();
t3.start();
}
}
- 学生表:STUDENT(ID,USER_NAME)和考试表:EXAM(ID,USER_ID,SCORE)表,STUDENT表主键为ID字段,EXAM表中外键USER_ID为STUDENT的ID字段值,编写SQL查询每位学生的成绩,缺考的以0分处理(缺考的考试表中无记录)
SELECT student.user_name,IFNULL(exam.score,0) FROM student,exam WHERE student.id = exam.user_id
- 已知用户表USER(ID,USER_NAME,AGE),通过sql语句查询表中相同年龄(AGE)存在两条以上记录的用户年龄及用户个数,并按照统计数量倒排序
SELECT age,count(id) FROM user GROUP BY age HAVING count(id) >=2 ORDER BY COUNT(id) DESC