• 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() +"]
    " + 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() +"]
    " + 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] + "	");
    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("
    【方案二】:");
    37         for(int i = 3; i < 7; i++){
    38             System.out.print(list.get(i) + "	");
    39         }
    40         // 方法三:  
    41         System.out.println("
    【方案三】:");
    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]+"	");
    56         }
    57         System.out.println();
    58     }
    59 }
    View Code
  • 相关阅读:
    vue3 + ts+ axios +vite
    用查询批量导入EXCEL 时,获取EXCEL 表sheet名称
    DataTable中,标题Caption,ColumnName的区别
    查询语句,从2张表中,根据共同字段,如果其他两个指定字段值不相等,则,显示两个值
    springboot 工程出现 socket hang up
    springboot工程引用本地lib文件夾内的jar包,打包時把依賴jar包打入jar包
    kubernetes常用命令1命令补全
    kubernetes常用命令2巡检集群状态
    BigDecimal数字计算工具类
    Nginx+RTMP HLS降低延迟参数
  • 原文地址:https://www.cnblogs.com/ftl1012/p/interview.html
Copyright © 2020-2023  润新知