都说程序员是最爱分享的一类人 :)
第一道:
水仙花数:
我记忆里做的第一道编程题有没有。。。
输出100到999里的数,这个数要求每位的数字的三次方之和等于该数字。另外最后还要输出这些水仙花数的总和。
解题过程:按题目一步步写喽。
第二道:
字符 . 代表1,字符 - 代表 0。输入类型“–.#。#-.-”的字符串,字符#是分隔符,可能会有连续的多个#。把形如“–.”的无符号二进制转换成十进制数字后,有张图表,根据这张图表上的映射关系,输出相应的英文字符(编程的时候要苦逼的把这张表手工输入到map里有没有。。。)。如果输入只是一连串的#,则输出一个空字符串,如果转换后的整数超出了图表里的0-51得范围,则输出“ERROR”。
解题过程:题目看懂了,可是我只过了80%的case。。。
第三道:判断调用函数之间是否存在循环调用
如果函数A直接或者间接调用了函数B,则输出“T”(true)
否则输出“F”(false)。
解题思路:我开始觉得这不就是剑指offer上的判断“链表是否存在环”吗?后来想想不是的,因为这个“链表”不一定是一条完整的链表,可能是断断续续的。后来就想把每个函数表示为一个节点,每个节点里包含函数名还有一个next指针指向自身调用的函数,只过了50%的case。后来想了想,应该是一个函数可能调用了多个函数,那就把next指针改为一个List(我用的是Java)。可是这里面有坑啊:
1. 要把节点保存在List里,在Java里就要重写hashCode和equals方法;
2. 如果B的next链表里保存的有C,后来C的信息更新了,B里的C也要更新。
也许我的方法就是shit,本人很菜,求不要鄙视。。。
谁知道华为机试怎么算分啊,求告知。。。看网上说第一道100,第二道200,第三道300,多少分能面试,为什么我今天在机试的前20分钟里华为的人给我打电话问我能不能参加几天后的面试?没通过只过了部分case还有分吗?这都什么鬼。。。