华为机试题01(2015部分)

来源:互联网 发布:先学c还是先学java 编辑:程序博客网 时间:2024/06/03 15:58

1、字符串分解
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”。
2、拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
3、去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
4、等式变换
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21

import java.util.Scanner;public class Test2015No01 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        int num = input.nextInt();        int length = input.nextInt();        for(int n=0;n<num;n++){            StringBuilder sb = new StringBuilder(input.next());            handleString(sb, length);        }        input.close();    }    private static void handleString(StringBuilder sb, int len){//      StringBuilder result = new StringBuilder();        if(sb.length() == 0){            System.exit(0);        }else if(sb.length()<len){            while(sb.length()<len){                sb.append("0");            }            System.out.println(sb);        }else{            System.out.println(sb.substring(0, len));            sb.delete(0, len);            handleString(sb, len);        }    }}
import java.util.Scanner;public class Test2015No02 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        String inputString = input.next();        System.out.println(handle(inputString));        input.close();    }    private static StringBuilder handle(String string){        StringBuilder sb = new StringBuilder();        byte[] b = string.getBytes();        for(int i=0;i<b.length;i++){            switch(b[i]){            case 'y':                sb.append("1");                i += 1;                break;            case 'e':                sb.append("2");                i += 1;                break;            case 'w':                sb.append("5");                i += 1;                break;            case 'l':                sb.append("6");                i += 2;                break;            case 'q':                sb.append("7");                i += 1;                break;            case 'b':                sb.append('8');                i += 1;                break;            case 'j':                sb.append("9");                i += 2;                break;            case 's':                if(b[i+1]=='i'){                    sb.append("4");                    i += 1;                    break;                }else {                    sb.append("3");                    i += 2;                    break;                }            }        }        return sb;    }}
import java.util.Scanner;public class Test2015No03 {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        String inputString = input.next();        handleStr(inputString);        input.close();    }    private static void handleStr(String str){        /*         * 开一个空间将找到的字符放在对应其ascii码的位置         * 如果存在就添加一个flag         * 再将有flag处对应的字符顺序打印出来         */        char[] newChar = new char[255];//开辟一个空间        char[] inputChars = str.toCharArray();//输入的char字符集        int temp;        for(int i=0;i<inputChars.length;i++){            temp = inputChars[i];//遍历输入的字符集,如果重复就置1,否则为0            if(newChar[temp]==0){                newChar[temp] = 1;            }        }        StringBuilder sb = new StringBuilder();        for(int j=0;j<newChar.length;j++){            //将为1的地方对应的字符打印出来            if(newChar[j] == 1){                sb.append((char)j);            }        }        System.out.println(sb.toString());    }}
/** 参考:http://blog.csdn.net/tan313/article/details/40041953*//* * 解题思路: *  9个数中间插8个空,每个空有三种选择:“”,“+”,“-” *  对于每种情况计算结果,如果结果等于给定的数值就输出,count+1 */public class Test2015No04 {    private static String[] numList = {"1","2","3","4","5","6","7","8","9"};    private static int count = 0;//结果计数    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] operators = new int[8];        int target = 5;        handleBlank(operators, target, 0);        System.out.println(count);    }    /**    * <p>Title: handleBlank</p>    * <p>Description: </p>得到8个空的全排列结果    * @param blank  运算符空格    * @param target 预期结果,即等号右边的数    */    private static void handleBlank(int[] blank, int target, int index){        //结束条件        if(index==8){            result(blank, target);            return;        }else {            //8个运算符空格,外层以“”,“+”,“-”循环,不断递归调用,结束条件是8个空格全满,即index=8            for(int j=0;j<3;j++){                blank[index] = j;//给每个blank赋值                handleBlank(blank, target, index+1);            }        }    }    /**    * <p>Title: result</p>    * <p>Description: </p>blank填充完毕之后计算结果    * @param blank  运算符空格    * @param target 预期结果    */    private static void result(int[] blank, int target){        String num = numList[0];//每个数        int sum = 0;//和        int ops = 1;//计算符        String expression = "";        expression = expression + numList[0];        for(int i=0;i<blank.length;i++){            switch(blank[i]){            case 0://""                num = num + numList[i+1];                expression = expression + numList[i+1];                break;            case 1://"+"                sum = calculate(sum, num, ops);//返回上一次计算结果,一定是上一次的结果                ops = 1;//记录本次运算符                num = numList[i+1];                expression = expression + "+" + numList[i+1];                break;            case 2://"-"                sum = calculate(sum, num, ops);                ops = 2;//记录本次运算符                num = numList[i+1];                expression = expression + "-" + numList[i+1];                break;            default:                break;            }        }        //最后一次没有算,这里的ops记录的是前一个blank的结果            if(ops == 1){                sum += Integer.parseInt(num);            }else if(ops == 2){                sum -= Integer.parseInt(num);            }            //判断结果            if(sum==target){                System.out.println(expression + "=" + target);                count++;            }    }    private static int calculate(int sum, String num, int ops){        switch(ops){        case 1:            sum += Integer.parseInt(num);            break;        case 2:            sum -= Integer.parseInt(num);            break;        default:            break;        }        return sum;    }}
0 0