我是靠谱客的博主 无心大白,这篇文章主要介绍Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值,现在分享给大家,希望可以做个参考。

文章目录

  • 1. 硬币找零,最少多少张纸币
  • 2. 将序列排序
  • 3. 判断两个矩形是否相交
  • 4. 从字符串中提取整数
  • 5. 编写注册验证功能
  • 6. 分解数字相乘后的最大值

1. 硬币找零,最少多少张纸币

描述:有1,5,10,50,100元,分别有:a、b、c、d、e张纸币。
若需要支付k元,最少需要多少张纸币能找零,若无解则输出-1

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package kdxf; import java.util.HashMap; import java.util.Scanner; public class Test01 { static HashMap<Integer,Integer> data = new HashMap<>(); static int res = Integer.MAX_VALUE; static int[] num = {1,5,10,50,100}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); for(int i=0;i<5;i++){ int p = sc.nextInt(); data.put(num[i],p); } int sum = sc.nextInt(); dfs(sum,0,4); System.out.println(res==Integer.MAX_VALUE?-1:res); } public static void dfs(int sum,int count,int start){ if (sum ==0 ){ res = Math.min(res,count); return; }else{ for(int i=start;i>=0;i--){ if (num[i]<=sum&&data.get(num[i])!=0){ int money = data.get(num[i]); int flag = 0; if (money*num[i]<=sum){ count+=money; data.put(num[i],0); flag = sum - money*num[i]; }else{ int q = sum/num[i]; count+=q; data.put(num[i],data.get(num[i])-q); flag = sum - q*num[i]; } dfs(flag,count,start-1); return; } } } } }

运行结果:
在这里插入图片描述

2. 将序列排序

描述:给出一个数字序列,需要输出排序过程

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package kdxf; import java.util.Scanner; public class Test02 { static int[] data; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); data = new int[num]; for(int i=0;i<num;i++){ data[i]=sc.nextInt(); } sort(0,num-1); } public static void sort(int left,int right){ if (left>=right) return; int start = left; int end = right; int now = data[left]; while (left<right){ int n; int m; while (left<right&&data[right]>now){ right--; } while(left<right&&data[left]<=now){ left++; } int tmp = data[right]; data[right] =data[left]; data[left] =tmp; } int p = data[start]; data[start] = data[left]; data[left] = p; print(); sort(start,left-1); sort(left+1,end); } public static void print(){ for(int i=0;i<data.length;i++){ if (i==data.length-1){ System.out.println(data[i]); return; } System.out.print(data[i]+" "); } } }

运行结果:
在这里插入图片描述

3. 判断两个矩形是否相交

描述:给定坐标:(0,0),(2,3),(1,2),(5,4)
判断前两个点对角线构成的矩形是否与后两个点构成的矩形相交
相交则输出1,否则输出0

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package kdxf; import java.util.Arrays; import java.util.Scanner; public class Test03 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[][] a = new int[2][2]; int[][] b = new int[2][2]; for(int i=0;i<2;i++){ a[i][0] = sc.nextInt(); a[i][1] = sc.nextInt(); } for(int i=0;i<2;i++){ b[i][0] = sc.nextInt(); b[i][1] = sc.nextInt(); } Arrays.sort(a,(o1, o2)->o1[0]-o2[0]); Arrays.sort(b,(o1,o2)->o1[0]-o2[0]); int aminx= Math.min(a[0][0],a[1][0]); int amaxx= Math.max(a[0][0],a[1][0]); int aminy= Math.min(a[0][1],a[1][1]); int amaxy= Math.max(a[0][1],a[1][1]); int bminx= Math.min(b[0][0],b[1][0]); int bmaxx= Math.max(b[0][0],b[1][0]); int bminy= Math.min(b[0][1],b[1][1]); int bmaxy= Math.max(b[0][1],b[1][1]); boolean res = find(aminx,aminy,bminx,bmaxx,bminy,bmaxy)|| find(aminx,amaxy,bminx,bmaxx,bminy,bmaxy)|| find(amaxx,aminy,bminx,bmaxx,bminy,bmaxy)|| find(amaxx,amaxy,bminx,bmaxx,bminy,bmaxy)|| find(bminx,bminy,aminx,amaxx,aminy,amaxy)|| find(bminx,bmaxy,aminx,amaxx,aminy,amaxy)|| find(bmaxx,bminy,aminx,amaxx,aminy,amaxy)|| find(bmaxx,bmaxy,aminx,amaxx,aminy,amaxy); if (res) System.out.println(1); else System.out.println(0); } public static boolean find(int x,int y,int xmin,int xmax,int ymin ,int ymax){ if (x>=xmin&&x<=xmax&&y>=ymin&&y<=ymax){ return true; }else { return false; } } }

运行结果:
在这里插入图片描述

4. 从字符串中提取整数

描述:例如:1a2
输出:12

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package kdxf; import java.util.Scanner; public class Test04 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String data = sc.nextLine(); int flag = 0; for(int i=0;i<data.length();i++){ if (i==0&&data.charAt(i)=='-'){ flag =1; System.out.print('-'); } if (data.charAt(i)>='0'&&data.charAt(i)<='9'){ System.out.print(data.charAt(i)); } } System.out.println(); } }

运行结果:
在这里插入图片描述

5. 编写注册验证功能

题目要求:编写注册验证功能
1.原系统中包括两个注册好的账号“zhangsan"和"lisi",要求新注册的账号用户名不能已经存在,否则输出”用户名已经存在“,中止程序。
2.密码必须是8到16位,且必须由数字和字母组成,否则输出”密码格式不正确“,中止程序。
3.手机号码必须是11位,且开头必须是1,否则输出”请输入正确的手机号“,中止程序
4.如果全部输入正确,输出”注册成功“

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.Scanner; public class demo02 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入用户名"); int flag=0; while(flag==0) { String name=sc.next(); flag=user(name,flag); if(flag==1) { break; } System.out.println("请输入密码"); String passerword=sc.next(); flag=passerword(passerword,flag); if(flag==1) { break; } System.out.println("请输入手机号"); String phone=sc.next(); flag=phone(phone,flag); if(flag==1) { break; } System.out.println("注册成功"); break; } } private static int phone(String phone, int flag) { if(phone.charAt(0)!=1||phone.length()!=11) { System.out.println("请输入正确的手机号"); flag=1; } return flag; } private static int passerword(String passerword, int flag) { if(passerword.length()<8||passerword.length()>16) { System.out.println("密码格式错误"); flag=1; } return flag; } private static int user(String name,int flag) { if(name.equals("zhangsan")||name.equals("lisi")) { System.out.println("该用户名已存在"); flag=1; } return flag; } }

6. 分解数字相乘后的最大值

题目要求: 将输入的数字n(n>=0)分解,然后让分解的数字相乘,求相乘后的最大值。
例如:
输入: 5
输出: 6

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner; public class demo03 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入一个数字"); long n=sc.nextLong(); //处理 if(n==0) { System.out.println(0); }else if(n%2==0) { long m=(n/2)*(n/2); System.out.println(m); }else { long m=(n/2)*(n/2+1); System.out.println(m); } } }

最后

以上就是无心大白最近收集整理的关于Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值的全部内容,更多相关Java笔试——2021届秋招编程题汇总1.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部