Java机试常见题——编程题(上)

字符串最后一个单词的长度

1 程序

import java.util.Scanner;
public class Main {


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String s="";
        // 下面这句一定要有
        while(input.hasNextLine()){
            s=input.nextLine();  // 输入一个字符串
            // lastIndexOf 表示" "在字符串中最后一次出现的为 
            System.out.println(s.length()-1-s.lastIndexOf(" ")); 
        }
    }
}

2 测试

hello world
5

计算字符个数

1 程序

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        String str = s.next();            // 输入的字符串
        char c = s.next().charAt(0);      // 输入的要比较的字符
        int i = getCount(str,c);          // 定义功能函数
        System.out.println(i);
    }

    public static int getCount(String str,char c){
        int count = 0;
        if(str != null && str.length() > 0){      // 字符串的长度必须不为空
            for(int i = 0;i < str.length();i++){  // 遍历字符串的每一个字符
                char ch = str.charAt(i);          // 定位到每一个要比较的字符
                char temp =ch;                    // 比较临时变量
                char temp1=c;                     // 比较临时变量
                if(ch>='a'&&ch<='z'){             // 小写转大写,注意是32
                    temp = (char)((int)ch -32);
                }
                if(c>='a'&&c<='z'){                // 小写转大写,注意是32
                    temp1 = (char)((int)c -32);
                }
                if(temp1 == temp){                 // 计数
                    count++;
                }
            }
        }else{
            count = 0;                              // 空串计数为0
        }
        return count;
    }


}

2 测试

ABCDEF
A
1

明明的随机数

1 程序

import java.util.Scanner;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int num = sc.nextInt();    // 要进行排序的随机数个数
            TreeSet<Integer> set = new TreeSet<Integer>();        // 有排序和去重的功能,默认升序
            for(int i = 0 ; i < num ;i++){
                int curr = sc.nextInt();            // 输入要排序的随机数
                set.add(curr);                      // 加入的集合,进行去重和排序
            }
            for(Integer i : set){                   // 注意这种循环写法
                System.out.println(i);              // 默认就是按照从小到大的顺序输出
            }
        }
    }
}

2 测试

11
12
21
12
21
34
56
78
98
56
43
23
12
21
23
34
43
56
78
98

字符串分隔

1 程序

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextLine()){   // 使得具有循环功能
            String s=scanner.nextLine();   //输入字符串
            split(s);        //分割字符串
        }
    }

    public static void split(String s){
        while(s.length()>=8){
            // 输出前8位
            System.out.println(s.substring(0, 8));
            // 去掉前8位
            s=s.substring(8);
        }
        if(s.length()>0){
            s=s+"00000000";   // 不足8位加8位
            System.out.println(s.substring(0, 8));     // 再截取最后一个8位
        }
    }
}

2 测试

abc
abc00000
123456789
12345678
90000000

进制转换

1 程序

import java.lang.Math;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){          // 使得具有循环功能
            String str = sc.nextLine();     //输入一个十六进制数
            System.out.println(fun(str.substring(2)));   //去掉0x
        }
    }

    public static int fun(String s){
        int n=0;          // 十进制数
        int temp = 0;     // 表示每一位的数字
        char ch;          // 字符串中的每一位
        // 0xABCD = 10*pow(16,3)+11*pow(16,2)+12*pow(16,1)+10*pow(16,0)+

        for(int i =0 ;i<s.length();i++)
        {
            ch = s.charAt(i);
            if(ch>='0'&&ch<='9'){   // 0到9对应的整型值
                temp = ch-'0';
            }else if(ch>='A'&&ch<='Z'){    // A到Z对应的整型值
                temp = ch-'A'+10;
            }else if(ch>='a'&&ch<='z'){    // a到z对应的整型值
                temp = ch-'a'+10;
            }else{
                break;       // 非法跳出
            }
            n += temp*Math.pow(16,(s.length()-i-1));
        }

        return n;
    }
}

2 测试

OxABC
2748

质数因子

1 程序

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner str = new Scanner(System.in);
        long num = str.nextLong();       // 输入一个整数
        String result = getResult(num);  // 功能函数
        System.out.println(result);
    }
    public static String getResult(long num){
        int pum = 2;    // 这里必须从2开始,先把所有为2的除尽,然后再把所有位3的除尽,依次类推
        String result = "";  // 记录分解后的质数
        while(num != 1){       
            while(num%pum == 0){
                num = num/pum;                   // 得出下一次要分解的数
                result = result + pum + " ";     // 从小到大依次输出质数
            }
            pum++;
        }
        return result;
    }
}

2 测试

180
2 2 3 3 5

取近似值

1 程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        double d=scanner.nextDouble();     // 输入一个浮点数
        System.out.println(getReturn(d));
    }
    
    public static int getReturn(double d) {
        int i=(int)d;     //浮点数的整数部分
        // 下面实现四舍五入
        if((d-i)>=0.5){
            return i+1;   
        }else{
            return i;
        }
    }
}

2 测试

5.5
6

合并表记录

1 程序

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            // TreeMap是具有排序功能的Map
            Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
            int n = sc.nextInt();   // 要合并的健值对个数
            for (int i = 0; i < n; i++) {   
                int s=sc.nextInt();     // 键
                int value=sc.nextInt();  // 值
                if (map.containsKey(s)) {        // map中已包含了这个键
                    map.put(s, map.get(s) + value);      // 将该键的值类加
                } else
                    map.put(s, value);         // 键值对加入到map中
            }
            for (Integer key : map.keySet()) {                // 默认按照键的升序排列,直接输出map的键值对
                System.out.println(key + " " + map.get(key));
            }
        }
    }
}

2 测试

4
0 1
0 2
1 2
3 4
0 3
1 2
3 4

提取不重复的整数

1 程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner str = new Scanner(System.in);
        StringBuffer sb = new StringBuffer();
        sb.append(str.next());  // 静态字符串转动态字符串
        String st = sb.reverse().toString();  // StringBuffer的reverse很管用的
        char[] ch = st.toCharArray();    // 转字符数组
        String jud = "";     // 最终要得到的串
        for (int i = 0; i < ch.length ; i++){           // 遍历字符数组
            String s1 = String.valueOf(ch[i]);       // 将字符转字符串
            if(!jud.contains(s1)){       // 不包含字符才能加
                jud = jud + s1;
            }
        }
        System.out.println(Integer.parseInt(jud));
    }
}

2 测试

56347645
54673

字符个数统计

1 程序

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            String s=scanner.nextLine();         // 输入字符串
            int len=getLen(s);
            System.out.println(len);
        }
    }


    public static int  getLen(String s) {
        int[] arr=new int[128];            // ASCII的字符表,对应为1或0,1表示字符串含有该字符,0,不含有该字符
        for(int i=0;i<s.length();i++){
            arr[s.charAt(i)]=1;            // s.charAt(i)表示对于的ASCII字符
        }
        int len=0;
        // 这里要注意,数组要用length,字符串要用length(),一个是有括号的,一个是没括号的
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==1){    // 为1,说明有该字符,就计数
                len++;
            }
        }
        return len;
    }
}

2 测试

sahdfjfasdlfjgshfgwegfgsdfsdh
10

数字颠倒

1 程序

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int n = new Scanner(System.in).nextInt();   // 输入一个整数
        System.out.println(reverse(n));
    }
    private static String reverse(int n){
        String str = String.valueOf(n);   // 将整数转化为字符串要用String.valueOf  将字符串转整数用  Integer.parseInt
        StringBuffer sb = new StringBuffer();
        for(int i=str.length()-1;i>=0;i--){
            sb.append(str.charAt(i));          //倒序将字符加入到StringBuffer
        }
        return sb.toString();   // 注意这里要toString下
    }
}

2 测试

56348756
65784365

字符串反转

1 程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s = in.nextLine();   // 输入字符串
            char[] b = s.toCharArray();  // 字符串转字符数组
            for (int i = b.length-1; i >= 0; i--) {   // 倒序输出
                System.out.print(b[i]);
            }
        }
    }
}

2 测试

fgsdafdhk
khdfadsgf

句子逆序

1 程序

import java.util.*;
public class Main{
    public static void main(String[] args)
    {
        Scanner scan=new Scanner(System.in);
        String str=scan.nextLine();   // 输入字符串
        String res=reverse(str);      // 逆序功能
        System.out.println(res);      // 逆序结果
    }
    public static String reverse(String str)
    {
        String[] s=str.split(" ");        // 单词存到字符串数组
        StringBuffer sb=new StringBuffer();   // 缓存结果
        for(int i=s.length-1;i>0;i--)          // 逆序保存
        {
            sb.append(s[i]);
            sb.append(" ");
        }
        sb.append(s[0]);   // 最后一个要单独出来
        return sb.toString();   // 注意要toString
    }
}

2 测试

I am a boy
boy a am I

字串的连接最长路径查找(字符串按自然顺序排序)

1 程序

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        ArrayList<String> list=new ArrayList<String>();
        //int num=scan.hasNextLine()?Integer.parseInt(scan.nextLine()):0;
        int num = Integer.parseInt(scan.nextLine());
        for(int i=0;i<num;i++){
            list.add(scan.nextLine());   // 输入要排序的字符串
        }

        Collections.sort(list);   // 对list集合元素按自然数升序排序
        for(String str:list){          // 输出排序结果
            System.out.println(str);
        }
    }
}

2 测试

5
cap
num
cakin
so
go
cakin
cap
go
num
so

求int型数据在内存中存储时1的个数

1 程序

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner str = new Scanner(System.in);
        int n = str.nextInt();   // 输入自然数
        String se = Integer.toBinaryString(n);    // 自然数转二进制字符串,toBinaryString关键是这句
        char[] ch = se.toCharArray();   // 继续转字符数组
        int count = 0;
        for(int i = 0;i<se.length();i++){       // 对一进行统计
            if(ch[i] == '1'){
                count++;
            }
        }
        System.out.println(count);
    }
}

2 测试

5
2

坐标移动

1 程序

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        while(scan.hasNextLine()){
            // 起始坐标为(0,0)
            int x=0;
            int y=0;
            String[]tokens=scan.nextLine().split(";");   // 将字符串转化为数组
            for(int i=0;i<tokens.length;i++){
                try{
                    int b=Integer.parseInt(tokens[i].substring(1));   // 取移动的数字
                    if(tokens[i].charAt(0)=='A'){    // 横坐标左移动
                        x-=b;
                    }
                    if(tokens[i].charAt(0)=='W'){    // 纵坐标上移动
                        y+=b;
                    }
                    if(tokens[i].charAt(0)=='S'){    // 纵坐标下移动
                        y-=b;
                    }
                    if(tokens[i].charAt(0)=='D'){   // 横坐标右移动
                        x+=b;
                    }
                }catch(Exception e){
                    continue;
                }
            }
            System.out.println(x+","+y);   // 最后的结果
        }
    }
}

2 测试

A10;S20;W10;D30;X;A1A;B10A11;;A10;
10,-10

密码验证合格程序

1 程序

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.nextLine();   // 输入密码
            int i=0;
            int[] cla={0,0,0,0};            // 对4种情况进行记录,初始值都是0
            if(str.length()<9)              // 必须大于8
                System.out.println("NG");
            else{
                for(i=0;i<str.length();i++){
                    char ch=str.charAt(i);           // 遍历每一个字符
                    if(ch>='0'&&ch<='9'){            // 数字情况
                        cla[0]=1;
                    }else if(ch>='a'&&ch<='z'){      // 小写字母
                        cla[1]=1;
                    }else if(ch>='A'&&ch<='Z'){      // 大写字母
                        cla[2]=1;
                    }else{                           // 其他情况
                        cla[3]=1;
                    }
                }
                if(cla[0]+cla[1]+cla[2]+cla[3]<3){   // 小于3 ,pass掉
                    System.out.println("NG");
                }else{
                    System.out.println(isHasSubString(str));   // 对重复串的判断
                }
            }
        }
    }
    private static String isHasSubString(String str) {
        /**  A B C D E F G    
         *   第1轮: ABC DEFG  看DEFG是否包含ABC 
         *   第2轮:BCD EFG   看EFG是否包含BCD
         *   第3轮:CDE FG    看FG是否包含CDE
         *   第4轮:DEF G     看G是否包含DEF
         *   
         */
        for (int i = 0; i < str.length() -3; i++) {
            String str1=str.substring(i,i+3);      // 前面3位子串
            String str2=str.substring(i+3);        // 后面的子串
            if(str2.contains(str1))                // 后面的子串包含前面的子串,就退出
                return "NG";
        }
        return "OK";
    }
}

2 测试

dfshay7w
NG
djsl5h43
NG
7f8dsh45b46#
OK

简单密码破解

1 程序

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.nextLine();   // 明文
            String ss="";  //密文
            int i=0;
            for(i=0;i<str.length();i++){    // 遍历明文中的每一个字符
                char ch=str.charAt(i);
                if(ch>='0'&&ch<='9')        // 数字不变化
                    ss=ss+ch;
                if(ch>='a'&&ch<='z'){       //小写字母变化
                    if(ch>='a'&&ch<='c')
                        ss=ss+"2";
                    if(ch>='d'&&ch<='f')
                        ss=ss+"3";
                    if(ch>='g'&&ch<='i')
                        ss=ss+"4";
                    if(ch>='j'&&ch<='l')
                        ss=ss+"5";
                    if(ch>='m'&&ch<='o')
                        ss=ss+"6";
                    if(ch>='p'&&ch<='s')
                        ss=ss+"7";
                    if(ch>='t'&&ch<='v')
                        ss=ss+"8";
                    if(ch>='w'&&ch<='z')
                        ss=ss+"9";
                }
                if(ch>='A'&&ch<='Z'){        // 大写字母变化
                    //char cc=Character.toLowerCase(ch);     //字符变小写
                    char cc = (char)((int)ch+32);            //大写子符变小写
                    if(cc=='z')
                        ss=ss+"a";    // 特殊情况处理
                    else
                    {
                        ss=ss+(char)((int)cc+1);   //字符加1
                    }
                }
            }
            System.out.println(ss);
        }
        sc.close();
    }
}

2 测试

YUANzhi1987
zvbo9441987

汽水瓶

1 程序

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){      // 循环输出
            int num = sc.nextInt();    // 输入空瓶
            if(num==0) break;      // 空瓶为0,程序结束
            int left = num;    // 剩余空瓶数
            int total = 0;     // 喝了多少瓶汽水
            while(left!=0){    // 只要剩余空瓶数不为0就可以换汽水
                if(left==2){       // 如果剩余空瓶数为2  可以多换一瓶,类加汽水数
                    total+=1;
                    break;
                }else if(left==1){    // 如果剩余空瓶数为1  ,不能换了
                    break;
                }else{
                    int curr = left/3;     // 剩余空瓶可以换的汽水数
                    total+=curr;             // 累加汽水数
                    left = left-curr*3+curr;    // 换完汽水,喝完汽水后,还剩的空瓶数,少了curr*3空瓶,但多出了curr
                }
            }
            System.out.println(total); 
        }
    }
}

2 测试

3
1
10
5
81
40
0

删除字符串中出现次数最少的字符

1 程序

import java.util.*;

public class Main{
    public static void main(String []args) {
        Scanner scan = new Scanner(System.in);
        String s = null;        // s代表要输入的字符串
        while(scan.hasNextLine()){
            s=scan.nextLine();
            int []count = new int[26];      // 对26个小写字母计数
            int min = Integer.MAX_VALUE;      // 最大的int值
            for(char c : s.toCharArray()){          // 遍历输入串,统计每个字符的个数,并算出最小字符的个数
                count[c - 'a']++;
                min = Math.min(min,count[c-'a']);
            }
            StringBuffer ret = new StringBuffer();    // 最终的串
            for(char c : s.toCharArray()){   // 遍历字符歘
                if(count[c - 'a'] != min){      // 过滤掉最小的字符
                    ret.append(c);
                }
            }
            System.out.println(ret.toString());
        }
    }
}

2 测试

fhsdajkfgswegsdh
fhsdfgsgsdh

二六 字符串排序

1 程序

import java.util.*;


public class Main{
    public static void main(String []args) {
        Scanner scan = new Scanner(System.in);
        String str;
        while(scan.hasNextLine()){
            str=scan.nextLine();
            StringBuilder builder = new StringBuilder();   // 最终输出
            for(int i=0;i<26;i++){                   // 外层循环遍历26个大写字母
                char c=(char)(i+'A');                // c定位到每一个大写字母
                for(int j=0;j<str.length();j++){     // 遍历输入的字符串
                    char sc=str.charAt(j);
                    if(c==sc||c==sc-32){             // 找到对应字母的大写字母和小写字母
                        builder.append(sc);          // 遍历完1轮后,将对应的大写字母和小写字母输出到缓存
                    }
                }
            }
            for(int i=0;i<str.length();i++){        // 遍历输入字符串
                char c=str.charAt(i);
                if(!(c>='a'&&c<='z')&&!(c>='A'&&c<='Z')){           //找到每一个非字母字符和它对应的下标
                    builder.insert(i,c);                            // 在对应下标位置插入对应的非字母字符
                }
            }
            System.out.println(builder.toString());    // 最终输出变换后的串
        }
    }
}

2 测试

A Famous Saying: Much Ado About Nothing (2012/8).
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

二七 查找兄弟单词

1 程序

import java.util.*;
/*
Arrays.equals(strChar, sChar)      Arrays.sort(strChar);   对数组的相关操作
Collections.sort(list)      对列表的排序   注意这些常用工具的用法
* */
public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();        // 输入单词个数n
            String[] arr = new String[n];     // 定义要处理的字符串
            for (int i = 0; i < n; i++) {     // 输入n个字符串
                arr[i] = scanner.next();
            }
            String str = scanner.next();       // 输出要进行比较的单词
            int m = scanner.nextInt();         // 输出第m个兄弟单词
            char[] strChar = str.toCharArray();   // 转字符数组
            Arrays.sort(strChar);  //对输入的指定单词的内部字符元素按字典序排序
            ArrayList<String> list = new ArrayList<String>();
            int count = 0;   // 兄弟单词计数
            for (int i = 0; i < n; i++) {
                int c = check(str, arr[i], strChar);   // 返回值为1,就是兄弟单词
                count += c;
                if (c == 1) {  //如果是兄弟单词,加入到集合中
                    list.add(arr[i]);
                }
            }
            System.out.println(count);
            Collections.sort(list); //对兄弟单词排序,注意这种用法
            if (count >= m) {
                System.out.println(list.get(m - 1));   // 输出对应的兄弟单词
            }
        }
    }

    private static int check(String str, String s, char[] strChar) {   // 参考串     输入串     排完序的串
        if (str.equals(s) || str.length() != s.length()) { //如果两个单词内容相同或长度不等,表明不是兄弟单词
            return 0;
        }
        char[] sChar = s.toCharArray();         // 将输入串转化为字符数组
        Arrays.sort(sChar);   //进行字典序排序
        return Arrays.equals(strChar, sChar) ? 1 : 0;  //比较排序后两个单词内容是否相等
    }
}

2 测试

3 abc bca cab abc 1
2
bca

字符串加解密

1 程序

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str;
        while(scan.hasNextLine()){
            str=scan.nextLine();           // 输入明文
            String str1 = Encrypt(str);    // 加密
            System.out.println(str1);      // 输出密文
            str=scan.nextLine();           // 输入密文
            String str2=unEncrypt(str);    // 解密
            System.out.println(str2);      // 输出明文
        }
    }

    private static String Encrypt(String line){
        char[] cha = line.toCharArray();             // 字符串数组化
        StringBuilder sb= new StringBuilder();       // 密文缓存
        for(int i=0;i<cha.length;i++){               // 遍历明文
            if (cha[i]>='a'&&cha[i]<='z'){           // 小写字母转大写
                if(cha[i]=='z'){
                    sb.append('A');
                }else{
                    sb.append((char)(cha[i]-32+1));  // 小写字母和大写字母相差32
                }
            }else if(cha[i]>='A'&&cha[i]<='Z'){      // 大写字母转小写
                if(cha[i]=='Z'){
                    sb.append('a');
                }else{
                    sb.append((char)(cha[i]+32+1));  // 小写字母和大写字母相差32
                }
            }else if(cha[i]>='0'&&cha[i]<='9'){      // 数字转化方法
                if(cha[i]=='9'){
                    sb.append('0');
                }else{
                    sb.append((char)(cha[i]+1));        // 注意:这里一定要进行强制类型转换
                }
            }else{
                sb.append(cha[i]);                    // 其他情况不变化
            }
        }
        return sb.toString();
    }

    private static String unEncrypt(String line){
        char[] cha = line.toCharArray();               // 字符串数组化
        StringBuilder sb= new StringBuilder();         // 明文缓存
        for(int i=0;i<cha.length;i++){
            if (cha[i]>='a'&&cha[i]<='z'){              // 小写字母转大写
                if(cha[i]=='a'){
                    sb.append('Z');
                }else{
                    sb.append((char)(cha[i]-32-1));      // 小写字母和大写字母相差32
                }
            }else if(cha[i]>='A'&&cha[i]<='Z'){          // 大写字母转小写
                if(cha[i]=='A'){
                    sb.append('z');
                }else{
                    sb.append((char)(cha[i]+32-1));      // 小写字母和大写字母相差32
                }
            }else if(cha[i]>='0'&&cha[i]<='9'){          // 数字变化
                if(cha[i]=='0'){
                    sb.append('9');
                }else{
                    sb.append((char)(cha[i]-1));
                }
            }else{
                sb.append(cha[i]);                       // 其他不变化
            }
        }
        return sb.toString();
    }
}

2 测试

abcdefg
BCDEFGH
BCDEFGH
abcdefg

字符串合并处理

1 程序

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner scan =new Scanner(System.in);
        String line;
        while(scan.hasNextLine()) {
            line=scan.nextLine();  //输入的字符串
            String[] str=line.split(" ");   // 将输入的字符串转为为数字
            String s=str[0]+str[1];      // 合并字符串
            StringBuilder br1=new StringBuilder();    // 0,2,4 位置的缓存
            StringBuilder br2=new StringBuilder();    // 1,3 5 位置的缓存
            for(int i=0;i<s.length();i++) {           // 遍历缓存
                if(i%2==0) {
                    br1.append(s.charAt(i));
                }
                else {
                    br2.append(s.charAt(i));
                }
            }
            char[] ch1=br1.toString().toCharArray();   // 转字符数组
            char[] ch2=br2.toString().toCharArray();   // 转字符数组
            Arrays.sort(ch1);  // 排序
            Arrays.sort(ch2);  // 排序
            char[] ch=new char[ch1.length+ch2.length];    // 存新串
            for(int i=0;i<ch.length;i++) {
                if(i%2==0) {
                    ch[i]=ch1[i/2];   // 存 0,2,4 位置
                }
                else {
                    ch[i]=ch2[i/2];   // 存1,3,5 位置
                }
            }
            char[] password = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'};
            char[] dictionary = {'0','8','4','C','2','A','6','E','1','9','5','D','3','B','7','F','5','D','3','B','7','F'};
            for(int i=0;i<ch.length;i++) {
                if((ch[i]>='0'&&ch[i]<='9')||(ch[i]>='a'&&ch[i]<='f')||(ch[i]>='A'&&ch[i]<='F')) {
                    String temp = String.valueOf(password);    // 字符数组转字符串
                    ch[i]=dictionary[temp.indexOf(ch[i])];     // 换后的值
                }
            }
            System.out.println(ch);
        }
    }
}

2 测试

dec fab
5D37BF

【中级】单词倒排

1 程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan =new Scanner(System.in);
        String line;
        while (scan.hasNextLine()){
            line=scan.nextLine();
            StringBuffer str1 = new StringBuffer();
            for (int i=0;i<line.length();i++){    //清洗原字符串
                char c=line.charAt(i);
                if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
                    str1.append(c);
                }else {
                    str1.append(' ');
                }
            }

            String[] str = str1.toString().trim().split(" ");    // 倒排字符串,注意这里要加trim
            StringBuffer sb=new StringBuffer();
            for (int i=0;i<str.length-1;i++){
                sb.append(str[str.length-i-1]);
                sb.append(" ");
            }
            sb.append(str[0]);
            System.out.println(sb.toString());
        }
    }
}

2 测试

I am a student
student a am I

整数与IP地址间的转换

1 程序

import java.io.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);

        String str;
        while(scan.hasNextLine()) {
            str=scan.nextLine();          // 点分十进制
            Change1(str);
            str=scan.nextLine();          // 十进制
            Change2(str);
        }
    }
    public static void Change1(String str) {               // 转十进制
        String[] data1 = str.split("\\.");     // 点分隔要转义

        data1[0] = Integer.toBinaryString(Integer.parseInt(data1[0]));
        data1[1] = Integer.toBinaryString(Integer.parseInt(data1[1]));
        data1[2] = Integer.toBinaryString(Integer.parseInt(data1[2]));
        data1[3] = Integer.toBinaryString(Integer.parseInt(data1[3]));

        // 转为标准的二进制串
        while(data1[0].length()<8) data1[0] = "0"+data1[0];
        while(data1[1].length()<8) data1[1] = "0"+data1[1];
        while(data1[2].length()<8) data1[2] = "0"+data1[2];
        while(data1[3].length()<8) data1[3] = "0"+data1[3];

        long sum = 0;
        // 采用的思想是左移为乘以2 ,然后加最低位,  依次类推
        for(int i=0;i<data1.length;i++) {     // 这里的长度为4
            for(int j=0;j<data1[0].length();j++) {     // 这里的长度为8
                sum = sum*2+(data1[i].charAt(j)-'0');    // 从左往右依次定位  10100010 10100010 10100010 10100010
            }
        }
        System.out.println(sum);   // 输出十进制


    }
    public static void Change2(String str) {                  // 转点分十进制
        long data2 = Long.parseLong(str);   // 字符串转数字
        String bindata2 = Long.toBinaryString(data2);   // 转二进制串
        String[] data = new String[4];
        // 10 01100010 10100010 10100010
        data[0] = bindata2.substring(0,bindata2.length()-3*8);       // 第一段
        data[1] = bindata2.substring(data[0].length(),data[0].length()+8);   // 第二段
        data[2] = bindata2.substring(data[0].length()+data[1].length(),data[0].length()+data[1].length()+8);  // 第三段
        data[3] = bindata2.substring(bindata2.length()-8,bindata2.length());  // 第4段
        
        System.out.print(Integer.valueOf(data[0],2)+".");   // 二进制转十进制
        System.out.print(Integer.valueOf(data[1],2)+".");
        System.out.print(Integer.valueOf(data[2],2)+".");
        System.out.println(Integer.valueOf(data[3],2));
    }

}

2 测试

10.0.3.193
167773121
167773121
10.0.3.193

图片整理

1 代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String line ;
        while(scan.hasNextLine())
        {
            line = scan.nextLine();
            char[] chs = line.toCharArray();   // 转字符数组
            Arrays.sort(chs);         // 排序
            System.out.println(chs);  // 输出
        }
    }
}

2 测试

Ihave1nose2hands10fingers
0112Iaadeeefghhinnnorsssv

蛇形矩阵

1 代码

import java.util.Scanner;
/*
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

想找9,就先找到7
想找14,就先找11
也就是先找到斜线和第1列元素的值
* */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();//矩阵行数
            System.out.print(getResult(n));
        }
    }
    private static String getResult(int n){
        StringBuilder builder = new StringBuilder();
        // i代表行坐标,j代表列坐标
        for(int i=1;i<=n;i++){
            //j为每行元素个数,start为每行第一个数,step为间隔
            for(int j=1;j<=n-i+1;j++){
                //[i,j]对应的第1列元素坐标是是[i+j-1,1],该坐标的值为1+1+2+ ...(i+j-1-1) = 1+(i+j-1)(i+j-2)/2
                //[i,j]对应的值1+(i+j-1)(i+j-2)/2+(j-1)
                int temp = 1+(i+j-1)*(i+j-2)/2+(j-1);
                builder.append(String.valueOf(temp)).append(" ");
                
            }
            builder.append("\n");
            //设置换行符
            // builder.setCharAt(builder.length()-1,'\n');
        }
        return builder.toString();
    }
}

2 测试

4
1 3 6 10
2 5 9
4 8
7

统计每个月兔子的总数

1 程序

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int monthCount = scan.nextInt();   //输入月数
            System.out.println(getTotalCount(monthCount));
        }
    }

    public static int getTotalCount(int monthCount)
    {
        int a = 1;
        int b = 1;
        int c = 1;
        for(int i=2; i< monthCount; ++i)
        {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}

2 测试

9
34

求小球落地5次后所经历的路程和第5次反弹的高度

1  程序

import java.util.Scanner;
public class Main {
    public static void main(String[]args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            int high=in.nextInt();
            System.out.println(getJourney(high));
            System.out.println(getTenthHigh(high));
        }
    }
    public static double getJourney(int high)
    {
        double highSum=0;
        double high1=high;
        for(int i=1;i<=5;i++){
            highSum+=high1+high1/2;
            high1/=2;
        }
        highSum-=high1;
        return highSum;
    }
    public static double getTenthHigh(int high)
    {
        double highSum=0;
        double high1=high;
        for(int i=1;i<=5;i++){
            high1/=2;
        }

        return high1;

    }
}

2  测试

2.875
0.03125

输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数

1 程序

import java.io.BufferedReader;


import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = "";
        while((line = br.readLine())!=null)
        {
            int EnglishCharCount=0;   //英文
            int BlankCharCount=0;     //空白
            int NumberCharCount=0;    //数字
            int OtherCharCount=0;     //其他


            char[] chs = line.toCharArray();
            for(int i=0;i<chs.length;++i){
                if((chs[i]>='a'&&chs[i]<='z')||(chs[i]>='A'&&chs[i]<='Z')){
                    ++EnglishCharCount;
                    continue;
                }
                else if(chs[i]==' '){
                    ++BlankCharCount;
                    continue;
                }
                else if(chs[i]>='0'&&chs[i]<='9'){
                    ++NumberCharCount;
                    continue;
                }
                else
                    ++OtherCharCount;
            }


            System.out.println(EnglishCharCount);
            System.out.println(BlankCharCount);
            System.out.println(NumberCharCount);
            System.out.println(OtherCharCount);
        }
    }
}

2 测试

1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
26
3
10
12

注:题目来自:https://www.nowcoder.com/ta/huawei

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值