Java学习---程序设计面试题[2]
百度2017春招笔试真题编程题集合之买帽子
1 // 2017-10-09
2 // 题目描述
3 // 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
4 // 输入描述:
5 // 首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000)
6 // 输出描述:
7 // 如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1
8 // 输入例子:
9 // 10
10 // 10 10 10 10 20 20 30 30 40 40
11 // 输出例子:
12 // 30
13
14 -------------------------------------------------
15 package com.huawei.test;
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.Scanner;
19
20 /**
21 输入描述:
22 首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000)
23 输出描述:
24 如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1
25 输入例子:
26 10
27 10 10 10 10 20 20 30 30 40 40
28 输出例子:
29 30
30 */
31 public class Test {
32 public static void main(String[] args){
33 Scanner scan = new Scanner(System.in);
34 while(scan.hasNext()){
35 //输入一个正整数
36 int n = scan.nextInt();
37 //开辟空间
38 int[] prices = new int[n];
39 //读取价格
40 for(int i = 0; i < prices.length; i++){
41 prices[i] = scan.nextInt();
42 }
43 //价格排序
44 Arrays.sort(prices);
45 ArrayList<Integer> list = new ArrayList<>();
46 //去重复
47 for(int i = 0;i < n; i++){
48 if(!list.contains(prices[i])){
49 list.add(prices[i]);
50 }
51 }
52 if(list.size()<3){
53 System.out.println(-1);
54 }else{
55 System.out.println(list.get(2));
56 }
57
58 }
59 }
60 }
View Code
寻找三角形
1 /**
2 * 题目描述
3 *
4 * 三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示。
5 * 现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
6 * 但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。
7 * 输入描述: 首先输入一个正整数N三维坐标系内的点的个数.(N <= 50) 接下来N行
8 * 每一行输入 c x y z,c为'R', 'G', 'B'的其中一个。
9 * x,y,z是该点的坐标。(坐标均是0到999之间的整数)
10 * 输出描述: 输出一个数表示最大的三角形面积,保留5位小数。
11 * 输入例子:
12 * 5
13 * R 0 0 0
14 * R 0 4 0
15 * R 0 0 3
16 * G 92 14 7
17 * G 12 16 8
18 * 输出例子: 6.00000
19 */
20 package com.ftl.test;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Scanner;
24 public class Test {
25 public static void main(String[] args) {
26 Scanner sc = new Scanner(System.in);
27 // 输入一个正整数N
28 System.out.println("Please input the Num:");
29 int n = sc.nextInt();
30 // N行 N 个数组
31 String[] nums = new String[n];
32 // 初始化
33 double temp = 0.0;
34 double area = Double.MAX_VALUE;
35 // 输入N行,用数组保存
36 for (int i = 0; i < n; i++) {
37 nums[i] = sc.nextLine();
38 }
39 // 获取颜色
40 char[] colors = new char[n];
41 for (int i = 0; i < n; i++) {
42 colors[i] = nums[i].split(" ")[0].charAt(0);
43 }
44 // 获取X轴
45 int[] x = new int[n];
46 for (int i = 0; i < n; i++) {
47 x[i] = Integer.parseInt(nums[i].split(" ")[1]);
48 }
49 // 获取Y轴
50 int[] y = new int[n];
51 for (int i = 0; i < n; i++) {
52 x[i] = Integer.parseInt(nums[i].split(" ")[2]);
53 }
54 // 获取Z轴
55 int[] z = new int[n];
56 for (int i = 0; i < n; i++) {
57 x[i] = Integer.parseInt(nums[i].split(" ")[3]);
58 }
59 // 进行判断 三个点的颜色要么全部相同,要么全部不同
60 for (int i = 0; i < n; i++) {
61 for (int j = i + 1; j < n; j++) {
62 for (int k = j + 1; k < n; k++) {
63 if (colors[i] == colors[j] && colors[j] == colors[k]
64 || colors[i] != colors[j] && colors[j] != colors[k]
65 && colors[k] != colors[i]) {
66 if (colors[i] == colors[j] && colors[j] == colors[k]
67 || colors[i] != colors[j]
68 && colors[j] != colors[k]
69 && colors[i] != colors[k]) {
70 double a = Math
71 .pow(Math.pow(Math.abs(x[i] - x[j]), 2)
72 + Math.pow(Math.abs(y[i] - y[j]), 2)
73 + Math.pow(Math.abs(z[i] - z[j]), 2),
74 0.5);
75 double b = Math
76 .pow(Math.pow(Math.abs(x[i] - x[k]), 2)
77 + Math.pow(Math.abs(y[i] - y[k]), 2)
78 + Math.pow(Math.abs(z[i] - z[k]), 2),
79 0.5);
80 double c = Math
81 .pow(Math.pow(Math.abs(x[k] - x[j]), 2)
82 + Math.pow(Math.abs(y[k] - y[j]), 2)
83 + Math.pow(Math.abs(z[k] - z[j]), 2),
84 0.5);
85
86 double p = (a + b + c) / 2;
87 // 海伦公式求空间三角形面积
88 temp = Math.pow(p * (p - a) * (p - b) * (p - c),
89 0.5);
90 if (area < temp) {
91 area = temp;
92 }
93 }
94 }
95 }
96 }
97 }
98 System.out.printf("%.2f",area);
99 }
100 }
View Code
输出不同的元素的个数
1 package com.ftl;
2 /**
3 * 输入字符串长度len1,字符串s1,字符串长度len2,字符串s2。
4 * 从后向前比较,以最短字符串为标准,输出不同的元素的个数。
5 * 例如: 输入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5
6 输出:2
7 函数原型 public int getDiffNum(int len1, String s1, int len2, String s2)
8 *
9 * @author ftl
10 */
11
12 public class HWText {
13 public static void main(String[] args){
14 String s1="1,3,5";
15 int len1=3;
16 String s2="2,4,2,7,6";
17 int len2=5;
18 int diffNum= getDiffNum(s1,len1,s2,len2);
19 System.out.println("不同的数目:"+diffNum);
20 }
21
22 public static int getDiffNum(String s1,int len1, String s2, int len2){
23 int num = 0;
24 //字符串转换为字符数组
25 String[] str1 = s1.split(",");
26 String[] str2 = s2.split(",");
27 //以最端的字符串为标准(换言之,就是确定循环的次数)
28 int len = len1<len2?len1:len2;
29 for (int i = 0; i < len; i++) {
30 //判断是否相等
31 if(!str1[len1-1-i].equals(str2[len2-1-i])){
32 num++;
33 }
34 }
35 return num;
36 }
37 }
View Code
混合运算
1 package com.ftl;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 /**
7 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
8 例如: 输入:3+8×2/9-2
9 输出:2
10 * @author ftl
11 */
12
13 public class HWText {
14 public static void main(String[] args){
15 String s="3+8×2/9-2 ";
16 int result=getMyRet(s);
17 System.out.println("最后结果:"+result);
18 }
19
20 public static int getMyRet(String s){
21 int len = s.length();
22 List<String> list = new ArrayList<>();
23 //字符串变成集合
24 for(int i = 0; i < len; i++){
25 list.add(s.charAt(i)+"");
26 }
27 System.out.println("list--->"+ list);//list--->[3, +, 8, ×, 2, /, 9, -, 2,
28 for(int i = 0; i<list.size(); i++){
29 if(list.get(i).equals("x")){
30 //计算乘法
31 int ji = Integer.parseInt(list.get(i-1))*Integer.parseInt(list.get(i+1));
32 //将积放在集合中,整个位置都后移一位,8现在是i的位置
33 list.add(i-1,ji+"");
34 //删除原来的位置
35 list.remove(i); //删除8
36 list.remove(i); //删除*
37 list.remove(i); //删除2
38 System.out.println("list--x后->"+ list);//list--x后->[3, +, 16, /, 9, -, 2, ]
39 //回到积的位置,再次参与运算
40 i--;
41 }else if(list.get(i).equals("/")){
42 int shang = Integer.parseInt(list.get(i-1))/Integer.parseInt(list.get(i+1));
43 list.add(i-1,shang+"");
44 list.remove(i); //删除16
45 list.remove(i); //删除/
46 list.remove(i); //删除9
47 System.out.println("list--/后->"+ list);//list--/后->[3, +, 1, -, 2, ]
48 i--; //回到商的位置
49 }
50 }
51 //新的list,只有+-,注意用新的变量k,否则会编译报错
52 for(int k=0;k<list.size();k++){//这个时候是新的size
53 if(list.get(k).equals("+")){
54 int he=Integer.parseInt(list.get(k-1))+Integer.parseInt(list.get(k+1));
55 list.add(k-1,he+"");
56 list.remove(k);
57 list.remove(k);
58 list.remove(k);
59 System.out.println("list--+后->"+ list); //list--+后->[4, -, 2, ]
60 k--;
61 }
62 if(list.get(k).equals("-")){
63 int cha=Integer.parseInt(list.get(k-1))-Integer.parseInt(list.get(k+1));
64 list.add(k-1,cha+"");
65 list.remove(k);
66 list.remove(k);
67 list.remove(k);
68 System.out.println("list-- -后->"+ list); //list-- -后->[2, ]
69 k--;
70 }
71 }
72 return Integer.parseInt(list.get(0));
73 }
74 }
View Code
二叉树算法描述
1 二叉树的遍历是指按照某条搜索路径访问树中的每个节点,使得每个节点的均只被访问一次。由二叉树的递归定义,遍历一棵二叉树便要决定对根节点、左子树和右子树的访问顺序。
2 常见的遍历次序有先序遍历、中序遍历和后序遍历。其中序指的是根节点在何时被访问。
3 先序遍历(PreOrder):若二叉树非空,则先访问根节点,再访问左子树,最后访问右子树。
4 中序遍历(InOrder):若二叉树非空,则先访问左子树,再访问根节点,最后访问右子树。
5 后序遍历(PostOder):若二叉树非空,则先访问左子树,再访问右子树,最后访问根节点。
View Code
统计字符串中某个字符出现的次数
1 package com.ftl;
2
3 public class HelloFtl {
4 public static void main(String[] args) {
5 // TODO 自动生成的方法存根
6 System.out.println("----------------------------------------");
7 String str = "want you know one thing";
8 int count = 0;
9 int count1 = 0;
10 char[] c = str.toCharArray();
11 for ( int i = 0; i < c.length; i++)
12 {
13 if (c[i] == 'o')
14 {
15 count++;
16 }
17 if (c[i] == 'n')
18 {
19 count1++;
20 }
21 }
22 System.out.println("O出现的次数为:" + count);
23 System.out.println("n出现的次数为:" + count1);
24 System.out.println("----------------------------------------");
25 int c1 = 0;
26 while ( str.indexOf("n") != -1) //indexOf存在则返回所处位置,否则返回-1
27 {
28
29 c1++;
30 //改变字符串数量
31 str = str.substring(str.indexOf("n") + 1);
32 System.out.println("Str "
33 + "为:" + str);
34
35 }
36 System.out.println("n出现的次数为:" + c1);
37 }
38
39 }
View Code
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
1 package com.ftl;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 /**
6 *题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
7 *1.程序分析:利用循环,使用Map存储数据.其实完全可以使用4个变量来解决,这边舍近求远复习下Map啦
8 *
9 * @author 小a玖拾柒
10 * Date: 2018年8月18日
11 *
12 */
13 public class Test2018 {
14 public static void main(String[] args) {
15 String str = "abcd 1234 ef *";
16 check(str);
17 check2(str);
18 check3(str);
19 }
20 // 方案一: 设定变量,根据数组ch[i]实现
21 private static void check(String str) {
22 int shuzi = 0;
23 int zifu = 0;
24 int kongge = 0;
25 int qita = 0;
26 char[] ch = str.toCharArray();
27 for(int i = 0; i < ch.length; i++){
28 if(String.valueOf(ch[i]).matches("\\d+")){
29 shuzi++;
30 }else if(String.valueOf(ch[i]).matches("\\w+")){
31 zifu++;
32 }else if(String.valueOf(ch[i]).matches("\\s+")){
33 kongge++;
34 }else{
35 qita++;
36 }
37 }
38 System.out.println("【方案一】" + "数字:" + shuzi + "、字符:" + zifu + "、空格:" + kongge + "、其他:" + qita);
39 }
40 // 方案二: 设定变量,根据charAt(i)实现
41 private static void check2(String str) {
42 int shuzi = 0;
43 int zifu = 0;
44 int kongge = 0;
45 int qita = 0;
46 for(int i = 0; i < str.length(); i++){
47 if(String.valueOf(str.charAt(i)).matches("\\d+")){
48 shuzi++;
49 }else if(String.valueOf(str.charAt(i)).matches("\\w+")){
50 zifu++;
51 }else if(String.valueOf(str.charAt(i)).matches("\\s+")){
52 kongge++;
53 }else{
54 qita++;
55 }
56 }
57 System.out.println("【方案二】" +"数字:" + shuzi + "、字符:" + zifu + "、空格:" + kongge + "、其他:" + qita);
58 }
59 // 方案三: 设定变量,根据map实现
60 private static void check3(String str) {
61 Map<String,Integer> map = new HashMap<>();
62 map.put("数字",0);
63 map.put("字符",0);
64 map.put("空格",0);
65 map.put("其他",0);
66 for(int i = 0; i < str.length(); i++){
67 if(String.valueOf(str.charAt(i)).matches("\\d+")){
68 map.put("数字", map.get("数字")+1);
69 }else if(String.valueOf(str.charAt(i)).matches("\\w+")){
70 map.put("字符", map.get("字符")+1);
71 }else if(String.valueOf(str.charAt(i)).matches("\\s+")){
72 map.put("空格", map.get("空格")+1);
73 }else{
74 map.put("其他", map.get("其他")+1);
75 }
76 }
77 System.out.println("【方案三】" +map);
78 }
79 }
View Code
简单的登录验证系统
1 package com.ftl;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6
7 class Check
8 {
9 private int age = 11;
10
11 // 内部类
12 public boolean validate(String name, String password)
13 {
14 if (name.equals("ftl") &&
15 password.equals("1012"))
16 {
17 return true;
18 }
19 else
20 {
21 return false;
22 }
23
24 }
25 }
26
27 class Operate
28 {
29 private String info[];
30
31 public Operate(String info[])
32 {
33 this.info = info;
34 }
35 public String login()
36 {
37 Check check = new Check();
38 String name = this.info[0];
39 String password = this.info[1];
40 String str = null;
41 if (check.validate(name, password))
42 {
43 str = "Welcome " + name.toUpperCase() +" comingg ";
44 }
45 else
46 {
47 str = "No Welcome " + name.toUpperCase() +" comingg ";
48 }
49 return str;
50 }
51 }
52
53 public class HelloFtl
54 {
55 public static void main(String args[])
56 {
57 String[] arg = new String[2];
58 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
59 System.out.println("Input the name and password[换行表示结束]: ") ;
60 for(int i = 0; i < arg.length; i++ ){
61 try
62 {
63 arg[i] = buf.readLine() ;
64 } catch (IOException e)
65 {
66 // TODO Auto-generated catch block
67 e.printStackTrace();
68 }
69 }
70 boolean flag = new Check().validate(arg[0], arg[1]);
71 System.out.println("-------------------------------------------");
72 if(flag){
73 Operate oper = new Operate(arg);
74 System.out.println(oper.login());
75 System.out.println("黄沙百战穿金甲,不破楼兰终不还");
76 }
77
78 }
79 }
View Code
加减乘除计算
1 package com.ftl;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 /**
7 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
8 例如: 输入:3+8×2/9-2
9 输出:2
10 * @author ftl
11 */
12
13 public class HWText {
14 public static void main(String[] args){
15 String s="3+8×2/9-2 ";
16 int result=getMyRet(s);
17 System.out.println("最后结果:"+result);
18 }
19
20 public static int getMyRet(String s){
21 int len = s.length();
22 List<String> list = new ArrayList<>();
23 //字符串变成集合
24 for(int i = 0; i < len; i++){
25 list.add(s.charAt(i)+"");
26 }
27 System.out.println("list--->"+ list);//list--->[3, +, 8, ×, 2, /, 9, -, 2,
28 for(int i = 0; i<list.size(); i++){
29 if(list.get(i).equals("x")){
30 //计算乘法
31 int ji = Integer.parseInt(list.get(i-1))*Integer.parseInt(list.get(i+1));
32 //将积放在集合中,整个位置都后移一位,8现在是i的位置
33 list.add(i-1,ji+"");
34 //删除原来的位置
35 list.remove(i); //删除8
36 list.remove(i); //删除*
37 list.remove(i); //删除2
38 System.out.println("list--x后->"+ list);//list--x后->[3, +, 16, /, 9, -, 2, ]
39 //回到积的位置,再次参与运算
40 i--;
41 }else if(list.get(i).equals("/")){
42 int shang = Integer.parseInt(list.get(i-1))/Integer.parseInt(list.get(i+1));
43 list.add(i-1,shang+"");
44 list.remove(i); //删除16
45 list.remove(i); //删除/
46 list.remove(i); //删除9
47 System.out.println("list--/后->"+ list);//list--/后->[3, +, 1, -, 2, ]
48 i--; //回到商的位置
49 }
50 }
51 //新的list,只有+-
52 for(int k=0;k<list.size();k++){//这个时候是新的size
53 if(list.get(k).equals("+")){
54 int he=Integer.parseInt(list.get(k-1))+Integer.parseInt(list.get(k+1));
55 list.add(k-1,he+"");
56 list.remove(k);
57 list.remove(k);
58 list.remove(k);
59 System.out.println("list--+后->"+ list); //list--+后->[4, -, 2, ]
60 k--;
61 }
62 if(list.get(k).equals("-")){
63 int cha=Integer.parseInt(list.get(k-1))-Integer.parseInt(list.get(k+1));
64 list.add(k-1,cha+"");
65 list.remove(k);
66 list.remove(k);
67 list.remove(k);
68 System.out.println("list-- -后->"+ list); //list-- -后->[2, ]
69 k--;
70 }
71 }
72 return Integer.parseInt(list.get(0));
73 }
74 }
View Code
生成随记不重复ID
1 import java.util.Random;
2
3 /**
4 * 各种id生成策略
5 * <p>Title: IDUtils</p>
6 * <p>Description: </p>
7 * @version 1.0
8 */
9 public class IDUtils {
10
11 /**
12 * 图片名生成
13 */
14 public static String genImageName() {
15 //取当前时间的长整形值包含毫秒
16 long millis = System.currentTimeMillis();
17 //long millis = System.nanoTime();
18 //加上三位随机数
19 Random random = new Random();
20 int end3 = random.nextInt(999);
21 //如果不足三位前面补0
22 String str = millis + String.format("%03d", end3);
23
24 return str;
25 }
26
27 /**
28 * 商品id生成
29 */
30 public static long genItemId() {
31 //取当前时间的长整形值包含毫秒
32 long millis = System.currentTimeMillis();
33 //long millis = System.nanoTime();
34 //加上两位随机数
35 Random random = new Random();
36 int end2 = random.nextInt(99);
37 //如果不足两位前面补0
38 String str = millis + String.format("%02d", end2);
39 long id = new Long(str);
40 return id;
41 }
42
43 public static void main(String[] args) {
44 for(int i=0;i< 100;i++)
45 System.out.println(genItemId());
46 }
47 }
View Code
就餐问题抽查情况
1 /**
2 问题描述: 某公司由于人多,午餐分为多批次就餐,严格要求每批次就餐时间。并定期抽查就餐情况。请编写程序实现就餐抽查情况。
3 • 要求实现函数: void check_lunch(int num, int time,int input[], int output[])
4 【输入】 int num,就餐总人数 int time,就餐分批数 char input[],就餐情况
5 【输出】 char output[], 违规就餐情况
6 【返回】 无 注:对就餐分3批的情况,12人就餐,正确的就餐情况应如下分布[1,2,3,1,2,3,1,2,3,1,2,3],不符合该分布的即是违规,输出时对相应位置0。
7 • 示例
8 1) 输入:num = 12,time = 3,input =[1,2,3,3,1,3,1,1,1,1,2,3] 输出:output = [1,2,3,0,0,3,1,0,0,1,2,3]
9 2) 输入:num = 11,time = 4,input =[1,2,3,4,2,3,3,4,1,2,3] 输出:output = [1,2,3,4,0,0,3,4,1,2,3]
10 • 算法思路:
11 比较简单,对数组中的元素进行取余运算判断与输入的关系
12 •算法代码:
13 * @author ftl
14 */
15
16 public class FTL2018 {
17 public static void main(String[] args){
18 int[] num = {1,2,3,3,1,3,1,1,1,1,2,3};
19 int[] output = sort(num, num.length);
20 }
21 public static int[] sort(int[] num, int len){
22 int count = 0;
23 int output[] = new int[len];
24 System.out.println("输入数据:" + Arrays.toString(num));
25 for (int i = 1; i <= len; i++) {
26 // 位置上的数字准确
27 if(i % 3 == num[i-1]){
28 output[i-1] = num[i-1];
29 }else if(i % 3 == 0 && num[i-1] == 3) {
30 output[i-1] = num[i-1];
31 }else{
32 output[i-1] = 0;
33 }
34 if(output[i-1] == 0){
35 count++;
36 }
37 }
38 System.out.println("输出数据:" + Arrays.toString(output));
39 System.out.println("共有" + count + "个人违规");
40
41 return output;
42
43
44 }
45 }
View Code
输入联想【正则匹配】
1 package com.ftl;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9 /**
10 问题描述: 输入联想功能是非常实用的一个功能,请编程实现类似功能。
11 • 要求实现函数: void auto_complete(char *str, char *tmp,char *output)
12 【输入】 char *str,候选字符串 char *tmp,输入字符串
13 【输出】 int *output,联想匹配的字符串
14 【返回】 无 注:候选字符串以空格隔开,输入字符串仅从字符串开始处匹配。将匹配的子字符串输出,同样以空格隔开。如无匹配成功的子字符串,则输出空字符串。
15 • 示例
16 1) 输入:str = chengdu chongqing,tmp = c 输出:output = chengdu Chongqing
17 2) 输入:str = chengdu chongqing,tmp = che 输出:end = Chengdu
18 3) 输入:str = beijing nanjing,tmp = jing 输出:end =
19 •算法思路:字符串匹配,充分利用容器string的优势,给出两种代码:一种利用string,一种利用字符串数组。
20
21 •算法代码:
22 * @author ftl
23 */
24
25 public class FTL2018 {
26 public static void main(String[] args){
27 String str = "chengdu,chongqing,changan";
28 String tmp = "che";
29 auto_complete(str, tmp);
30 auto_complete1(str, tmp);
31 }
32 //方案一: 利用正则进行查找
33 public static void auto_complete(String str, String tmp){
34 List<String> list = new ArrayList<>();
35 String[] s = str.split(",");
36 for(int i = 0; i < s.length; i++){
37 String regex = tmp + "[a-zA-Z]";
38 Matcher p = Pattern.compile(regex).matcher(s[i]);
39 if(p.find()){
40 list.add(s[i]);
41 }
42 }
43 System.out.println("匹配成功["+ list.size() +"]\n" + list);
44 }
45 //方案二: 利用String类的startWith()方法
46 public static void auto_complete1(String str, String tmp){
47 List<String> list = new ArrayList<>();
48 String[] s = str.split(",");
49 for(int i = 0; i < s.length; i++){
50 if(s[i].startsWith(tmp)){
51 list.add(s[i]);
52 }
53 }
54 System.out.println("匹配成功["+ list.size() +"]\n" + list);
55 }
56 }
View Code
正则学习
1 package com.ftl;
2
3 import java.util.regex.Matcher;
4 import java.util.regex.Pattern;
5
6 public class Test2018 {
7 public static void main(String[] args) {
8 //需要进行爬虫的字符串
9 String s = "shshska13966668888hdjd13966668888iaj";
10 //写正则
11 String regex = "s\\w";
12 //把正则表达式编译成一个正则对象
13 Pattern p = Pattern.compile(regex);
14 //获取匹配器
15 Matcher m = p.matcher(s);
16 while(m.find()){
17 System.out.println(m.group());
18 }
19 }
20 }
View Code
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
1 package com.ftl;
2
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Vector;
7
8 /**
9 * 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
10 * @author 小a玖拾柒
11 * Date: 2018年8月18日
12 */
13
14 public class Test2018 {
15
16 public static void main(String[] args) {
17 int[] ch = new int[]{1,2,3,5,6,7,9,12,16}; //已经排好序的数组
18 int num = 15;
19 // 方案一: 排序判断,有小问题,针对此案例,问题不大
20 addNumber(ch, num );
21
22 // 方案二: 利用Collections工具类
23 List<Integer> list = new Vector<>();
24 for(int i = 0; i < ch.length; i++){
25 list.add(ch[i]);
26 }
27 list.add(num);
28 Collections.sort(list);
29 System.out.println("【方案二】:" + list);
30
31 // 方案三: 利用System类
32 String str = "1,2,3,5,6,7,9,12,16";
33 String[] arr = str.split(",");
34 String[] abc = new String[arr.length + 1];
35 int flag = 0;
36 for(int i = 0; i < arr.length; i++){
37 if(Integer.valueOf(arr[i]) > num){
38 flag = i;
39 break;
40 }
41 }
42 System.arraycopy(arr, 0, abc, 0, flag);
43 abc[flag] = String.valueOf(num);
44 System.arraycopy(arr, flag, abc, flag+1, 1);
45 System.out.println("【方案三】:" + Arrays.toString(abc));
46 }
47
48 public static int[] addNumber(int[] ch, int num){
49
50 int[] arr = new int[ch.length + 1];
51 int tmp = 0;
52 for(int i = 0; i < ch.length; i++){
53 // 如果小,则不动
54 if(ch[i] < num){
55 arr[i] = ch[i];
56 }else{
57 arr[i] = num;
58 tmp = i;
59 break;
60 }
61 }
62 for(int i = tmp ; i < ch.length; i++){
63 arr[i+1] = ch[i];
64 }
65 System.out.println("【方案一】:" + Arrays.toString(arr));
66 return arr;
67 }
68 }
View Code
有200个小朋友拉成一个圆圈,从其中某一个小朋友开始依次编号1-200,从1号小朋友开始循环1-3报数,数到3的小朋友就退出。编写一个Java应用程序,计算出最后一个小朋友的号码是多少。
1 package com.ftl;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Scanner;
6
7 /**
8 * 有200个小朋友拉成一个圆圈,从其中一个小朋友开始依次编号1-200,
9 * 从1号小朋友开始循环1-3报数,数到3的小朋友就退出。
10 * 编写一个Java应用程序,计算出最后一个小朋友的号码是多少。
11 *
12 * 1 2 3 1 2 3 1 2 3
13 * @author 小a玖拾柒
14 * Date: 2018年8月18日
15 */
16
17 public class Test2018 {
18
19 public static void main(String[] args) {
20 System.out.println("输入有多少个小朋友:");
21 Scanner s = new Scanner(System.in);
22 int n = s.nextInt();
23
24 List<Integer> l = new ArrayList<Integer>();
25 for(int i=1; i<=n; i++){
26 l.add(i);
27 }
28 System.out.println(play(l, 0, 3));
29 }
30
31 /**
32 * @param l 剩下小朋友List
33 * @param n 第n个开始报数
34 * @param m 数到m的人退出
35 * @return 最后一个小朋友的号码
36 */
37 public static int play(List<Integer> list, int n, int m){
38 int num = list.size();
39 // 仅剩余一个学生, 返回最后一个学生的信息
40 if(num <= 1 ){
41 return list.get(0);
42 }else{
43 n = n + m - 1;
44 while(n >= num)
45 n = n - num;
46 list.remove(n);
47 return play(list, n, m);
48 }
49 }
50 }
View Code
取一个整数a从右端开始的4~7位
1 package com.ftl;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collections;
6 import java.util.List;
7 import java.util.Scanner;
8
9 /**
10 取一个整数a从右端开始的4~7位。
11 * @author 小a玖拾柒
12 * Date: 2018年8月18日
13 */
14
15 public class Test2018 {
16
17 public static void main(String[] args) {
18 int a = 123456789;
19 // 方案一: 利用数组进行数组反转输出
20 String str = String.valueOf(a);
21 char[] arr = new char[str.length()];
22 for(int i = 0; i < arr.length; i++){
23 arr[arr.length-i-1] = str.charAt(i);
24 }
25 System.out.println("【方案一】:");
26 for(int i = 3; i < 7; i++){
27 System.out.print(arr[i] + "\t");
28 }
29
30 // 方案二: 利用list进行数组反转输出
31 List<Character> list = new ArrayList<>();
32 for(int i = 0; i < arr.length; i++){
33 list.add(str.charAt(i));
34 }
35 Collections.reverse(list);
36 System.out.println("\n【方案二】:");
37 for(int i = 3; i < 7; i++){
38 System.out.print(list.get(i) + "\t");
39 }
40 // 方法三:
41 System.out.println("\n【方案三】:");
42 getNum(a, 4, 7);
43 }
44 public static void getNum(int a, int m, int n){
45 int[] ans = new int[n-m+1];
46 for(int i=1,j=0; j<ans.length && a>0;i++){
47 if(i>=m && i<=n){
48 ans[j] = a%10;
49 j++;
50 }
51 a = a / 10;
52 }
53
54 for(int i=ans.length-1; i>=0; i--){
55 System.out.print(ans[i]+"\t");
56 }
57 System.out.println();
58 }
59 }
View Code
作者:小a玖拾柒
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!