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

 

posted @ 2018-07-21 11:12  小a玖拾柒  阅读(436)  评论(0编辑  收藏  举报