华为笔试题(2)

一、
Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多。
你能替Redraiment研究他最多走的步数吗?
输入描述:
输入多行,先输入数组的个数,再输入相应个数的整数
输出描述:
输出结果
样例输入
6
2 5 1 5 4 5
样例输出
3
提示
Example:
6个点的高度各为 2 5 1 5 4 5
如从第1格开始走,最多为3步, 2 4 5
从第2格开始走,最多只有1步,5
而从第3格开始走最多有3步,1 4 5
从第5格开始走最多有2步,4 5
所以这个结果是3。

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //最大非连续上升子序列问题
        while(sc.hasNext()) {
            int n = sc.nextInt();
            int a[] = new int [n];
            for(int i = 0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            int[] dp = new int[n];
            for(int i = 0; i < n; i++) {
                dp[i] = 1;
                for(int j = 0; j < i; j++) {
                    if(a[j] < a[i]) {
                        dp[i] = Math.max(dp[i], dp[j] + 1);
                    }
                }
            }
            //dp[n-1]并不一定是最大的情况
            int res = 0;
            for(int i = 0; i < n; i++) {
                res = Math.max(res, dp[i]);
            }
            System.out.println(res);
        }
        sc.close();
    }
}

二、
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出。
如果有其他字符,则对这些字符不用进行统计
清空目前的统计结果,重新统计
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1
输入
aadddccddc
输出
dca

class ch {
    int cnt;
    char c;
    public ch(int cnt, char c) {
        this.cnt = cnt;
        this.c = c;
    }
}
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //直接TreeSet排序
        while(sc.hasNext()) {
            String str = sc.nextLine();
            Set<ch> set = new TreeSet<ch>(new Comparator<ch>(){
                @Override
                public int compare(ch o1, ch o2) {
                    if(o1.cnt < o2.cnt) {
                        return 1;
                    }else if(o1.cnt == o2.cnt) {
                        return o1.c - o2.c;
                    }else {
                        return -1;
                    }
                }
            });
            int len = str.length();
            int bucket[] = new int[128];
            for(int i = 0; i < len; i++) {
                int tmp = str.charAt(i);
                bucket[tmp]++;
            }
            for(int i = 0; i < 128; i++) {
                if(bucket[i] != 0) {
                    set.add(new ch(bucket[i], (char)i));
                }
            }
            for(ch c : set) {
                System.out.print(c.c);
            }System.out.println();
        }
        sc.close();
    }
}

三、
题目描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序
输入描述:
1、输入需要输入的整型数个数
2、输入排序标识,0表示按升序,1表示按降序
输出描述:
输出排好序的数字
示例1
输入
8
1 2 4 9 3 55 64 25
0
输出
1 2 3 4 9 25 55 64

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //直接冒泡排序
        while(sc.hasNext()) {
            int n = sc.nextInt();
            int[] a = new int[n];
            for(int i = 0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            int flag = sc.nextInt();
            if(flag == 0) {
                for(int i = n - 1; i > 0; i--) {
                    for(int j = 0; j < i; j++) {
                        if(a[j] > a[j + 1]) {
                            int tmp = a[j];
                            a[j] = a[j + 1];
                            a[j + 1] = tmp;
                        }
                    }
                }
            }else if(flag == 1) {
                for(int i = n - 1; i > 0; i--) {
                    for(int j = 0; j < i; j++) {
                        if(a[j] < a[j + 1]) {
                            int tmp = a[j];
                            a[j] = a[j + 1];
                            a[j + 1] = tmp;
                        }
                    }
                }
            }
            for(int i = 0; i < n - 1; i++) {
                System.out.print(a[i]+" ");
            }System.out.println(a[n - 1]);
        }
        sc.close();
    }
}

四、
自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。
请求出n以内的自守数的个数
输入描述:
int型整数
输出描述:
n以内自守数的数量。
示例1
输入
2000
输出
8

public class Main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //可以用indexOf
        while(sc.hasNext()) {
            int n = sc.nextInt();
            int cnt = 0;
            for(int i = 0; i <= n; i++) {
                String tmp = String.valueOf(i * i);
                String tmpi = String.valueOf(i);
                if(tmp.lastIndexOf(tmpi) == tmp.length() - tmpi.length()) {
                    cnt++;
                }
            }
            System.out.println(cnt);
        }
        sc.close();
    }
}

五、
将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变
输入描述:
输入一个字符串
输出描述:
字符中所有出现的数字前后加上符号“*”,其他字符保持不变
输入
Jkdi234klowe90a3
输出
Jkdi*234*klowe*90*a*3*

public class Main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //先给每个数字前后加上*,连续的数字间会有两个*,去掉即可
        while(sc.hasNext()) {
            String str = sc.nextLine();
            StringBuffer sb = new StringBuffer();
            int len = str.length();
            for(int i = 0; i < len; i++) {
                char c= str.charAt(i);
                if(c - '0' >= 0 && c - '0' <= 9) {
                    sb.append("*"+c+"*");
                }else {
                    sb.append(c);
                }
            }
            System.out.println(sb.toString().replace("**", ""));

        }
        sc.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值