华为校招软件上机考试题目解析

转载请注明出处:

http://blog.csdn.net/gane_cheng/article/details/52184215

http://www.ganecheng.tech/blog/52184215.html (浏览效果更好)

华为校招软件上机考试,技术岗需要软件上机考试。

总共三道题。

题目分数可以提交次数
回文数字判断1005
字符串排序2005
整数排序3005

第一题 回文数字判断

描述: 有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。判断某数字是否是回文数字。
运行时间限制: 10 Sec
内存限制: 128 MByte
输入: 整型数字
输出: 0:不是回文数字;1:是回文数字。
样例输入: 121
样例输出: 1

解题思路:从头部和尾部比较,如果相同,则为回文数字,只要有一个不同,则不是回文数字。

import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int a;
        while (cin.hasNext())
        {
            a = cin.nextInt();
            System.out.println(isPalindromeNumber(String.valueOf(a)) ? 1 : 0);
        }
    }

    public static boolean isPalindromeNumber(String strIn)
    {
        if (strIn == null || strIn.length() < 1)
        {
            return false;
        }

        char[] numArr = strIn.toCharArray();

        boolean isPalidromeNum = true;
        for (int i = 0; i < numArr.length / 2; i++)
        {
            if (numArr[i] != numArr[numArr.length - 1 - i])
            {
                isPalidromeNum = false;
            }
        }

        return isPalidromeNum;
    }
}

第二题 字符串排序

描述: 输入一个字符串,对英文字母按照ASCII码排序,非英文字母保留原有的位置。输入字符串长度不超过100 。
运行时间限制: 无限制
内存限制: 无限制
输入: 字符串
输出: 排序后的字符串
样例输入: Wor#d
样例输出: Wdo#r

解题思路:先走一遍字符串,然后用一个数组存储出现的字母次数,然后替换掉原来的顺序。此方法在字符串超长的情况下,效果很好。


import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String a;
        while (cin.hasNext())
        {
            a = cin.next();
            System.out.println(getAlphabetOrderString(a));
        }
    }

    public static String getAlphabetOrderString(String strIn)
    {
        if (strIn == null || strIn.length() == 0)
        {
            return "";
        }
        char[] strArr = strIn.toCharArray();
        int[] intArr = new int[58];

        for (char c : strArr)
        {
            int tempNum = c - 'A';
            if ((tempNum >= 0 && tempNum < 26) || (tempNum >= 32 && tempNum < 58))
            {
                intArr[c - 'A'] += 1;
            }
        }

        int j = 0;

        for (int i = 0; i < intArr.length; i++)
        {
            while (intArr[i] > 0)
            {
                while (j < strArr.length)
                {
                    if (Character.isLetter(strArr[j]))
                    {
                        strArr[j++] = (char) (i + 'A');
                        intArr[i]--;
                        break;
                    }
                    else
                    {
                        j++;
                    }
                }
            }
        }
        return String.valueOf(strArr);
    }
}

第三题 整数排序

描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
运行时间限制: 无限制
内存限制: 无限制
输入: 一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。
输出: 排序后的值,各个整数之间以空格分隔。
样例输入: 1,4,3,110,2,90,7
样例输出: 1 4 7 90 110

解题思路:先排序,然后输出首尾两个数字,然后中间的数字走一遍,如果和前后的数字不连续,直接输出,如果和前后的数字连续,继续向后遍历直到不连续,输出字符。


import java.util.*;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String a;
        while (cin.hasNext())
        {
            a = cin.next();
            String[] intStrArr = a.split(",");
            int[] intArr = new int[intStrArr.length];
            for (int i = 0; i < intArr.length; i++)
            {
                intArr[i] = Integer.parseInt(intStrArr[i]);
            }

            Arrays.sort(intArr);

            if (intArr.length == 0)
            {
                System.out.println("");
            }
            else if (intArr.length == 1)
            {
                System.out.println(intArr[0]);
            }
            else if (intArr.length == 2 && intArr[0] == intArr[1])
            {
                System.out.println(intArr[0]);
            }
            else
            {
                System.out.print(intArr[0] + " ");

                for (int i = 1; i < intArr.length - 1; i++)
                {

                    if ((intArr[i] == intArr[i + 1] - 1) && intArr[i] == intArr[i - 1] + 1)
                    {
                        continue;
                    }

                    System.out.print(intArr[i] + " ");

                }

                System.out.print(intArr[intArr.length - 1]);
            }

        }
    }

}
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
华为校招机试是指华为公司面向应届大学毕业生进行的一系列招聘流程中的机试环节。此机试是华为公司用于评估应聘者计算机相关知识和技术能力的一种方式。 历年来,华为校招机试在csdn(中国软件开发者社区)上引起了广泛讨论和关注。许多参与过华为校招机试的应聘者在csdn上分享了一些他们的经历和心得体会。他们多数认为,华为校招机试难度较高,考察面较广,需要对计算机基础知识、算法和数据结构、操作系统、网络等方面有较扎实的掌握和理解。 从历年的csdn帖子中,我们可以看到华为校招机试题目的类型多样,不仅包括单选题、多选题、填空题等传统题型,还可能有编程题、算法题等需要应聘者进行实际编程实现的题目。应聘者需要具备较强的编程和问题解决能力,能够灵活运用所学知识,快速分析问题并给出正确解答。 除了知识和技术的考察,华为校招机试还重视应聘者的综合素质和团队协作能力。有些考题可能涉及到实际工作场景或项目实施情况,要求应聘者积极思考、利用团队资源进行解决,并且能够对所给问题进行全面分析和合理回答。 综上所述,历年华为校招机试在csdn上的讨论主要集中在题目类型、难度和要求上。参与华为校招机试的应聘者需要具备扎实的计算机基础知识、编程能力和问题解决能力,同时还要在团队协作和综合素质方面有一定优势。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值