牛客网华为算法题解-huawei_algo

第85题,最长子回文字符串

第95题人民币转换 题干: 题干分析,就是说输入一串double类型的数值,精确到小数点后两位,然后转换成元角分的读法


public class Main {
	public static String[] RMB = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
	public static String[] unit1 = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
	public static String[] unit2 = {"角", "分"};
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			String s = sc.next();
			String result = "";
			if(s.contains(".")) {
				String s1 = s.substring(s.indexOf('.') + 1);
				String s2 = s.substring(0, s.indexOf('.'));
				result = "人民币" + integer(s2) + decimal(s1);
			} else
				result = "人民币" + integer(s) + "整";
			System.out.println(result);
		}
	}
	// 处理整数
	public static String integer(String s) {
		if(s.length() == 1 && s.charAt(0) == '0') return "";
		StringBuilder sb = new StringBuilder();
		for (int i = s.length() - 1; i > - 1; i -- )
			sb.append(s.charAt(i));
		int[] arr = new int[s.length()];
		for (int i = 0; i < arr.length; i ++ )
			arr[i] = Integer.parseInt(String.valueOf(sb.toString().charAt(i)));
		sb.delete(0, sb.length());
		for (int i = 0; i < arr.length; i ++ )
			sb.append(unit1[i] + RMB[arr[i]]);
		sb = sb.reverse();
		if(sb.charAt(0) == '壹' && sb.charAt(1) == '拾') sb.deleteCharAt(0);
		return sb.toString();
	}
	// 处理小数
	public static String decimal(String s) {
		String temp = "";
		int[] arr = new int[s.length()];
		for (int i = 0; i < arr.length; i ++ )
			arr[i] = Integer.parseInt(String.valueOf(s.charAt(i)));
		for (int i = 0; i < arr.length; i ++ ) {
			if(arr[i] == 0) continue;
			temp += RMB[arr[i]] + unit2[i];
		}
		return temp;
	}
}



第102题 字符统计 输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。 本题含有多组样例输入,输入描述: 一个只包含小写英文字母和数字的字符串。 输出描述: 一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new       InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            TreeMap<Character, Integer> map = new TreeMap<>();
            for (int i = 0; i < s.length(); i++) {
         map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
            }
            List<Map.Entry> list = new ArrayList<>(map.entrySet());
            Collections.sort(list, (o1, o2) -> (int) o2.getValue() - (int) o1.getValue());
            for (Map.Entry entry : list) {
                System.out.print(entry.getKey());
            }
            System.out.println();
        }
    }
}


第103题 走梅花桩 其实就是找最长上升子序列的问题




第105题 输入 n 个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        float positive = 0;
        int negative = 0;
        float sum = 0;
        while (sc.hasNextInt()){
            int cur = sc.nextInt();
            if (cur >= 0){
                positive++;
                sum += cur;
            }else{
                negative++;
            }
        }
        System.out.println(negative);
        System.out.printf("%.1f\n", sum/positive);
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务