序文
2日前、友人のグループが、Huaweiにインタビューに行ったときに、コンピューターテストの部分に遭遇したが、事前に準備していなかったために寒くなったと言ったので、編集者は緊急時に主要な工場からコンピューターテストの質問を急いで準備しました。
1:文字列の最後の単語の長さ:
タイトル:入力はスペースで区切られた複数の単語です。最後の単語の長さを出力する必要があります。
アイデア:文字列を読み取り、文字列の特定の長さlを見つけ、スペースを指すまでポインタを後ろから前に移動し、この時点で添え字iを記録すると、最後の文字列の長さはl + 1-iになります。
コードは次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
2:文字数を数える
トピック:文字と数字の文字列と1文字を受け入れ、入力文字列の文字数を出力するプログラムを作成します。大文字と小文字を区別しません。
アイデア:大文字と小文字は区別されないことに注意してください。ASCIIコードをクエリすると、大文字と小文字の差が32であることがわかります(たとえば、Aの値は65、aの値は97など)。したがって、便利な配列の場合、クエリ条件はsを除きます。 [i] == aも "または(s [i] +32)== aまたは(s [i] -32)== a"を追加
します。コードは次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
3:明らかなランダム番号の
問題:実際には、複数行のデータを入力することです。最初は行の番号で、残りはデータです(入力は循環的であることに注意してください)。入力データは並べ替えて複製する必要があります(値が0であることに注意してください)。 1000まで、すべて整数です。
アイデア:入力はすべて整数で範囲が制限されているため、ほとんどの出力は0〜1000です。たとえば、入力7、次にa [7のように、a [1001]を適用するだけで十分です。 ] == 1の場合、出力時に配列にマークを付けると便利です。出力配列の添え字は1つだけです。
コードは次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
四:字符串分割
题目:连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。只输入两次。
思路:由于固定给出2次,运用函数思想,写出字符串分割函数调用两次即可,注意到函数用到了递归的思想。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
五:进制转换
题目:写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
思路:直接调用系统函数即可
代码如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
六:质数因子
题目:要求输入long 型整数,从小到大输出其址因子
思路:从2开始,反复取余,如果为0,代表2是其因子,但注意到除2以后仍可能被2整除,故2不变;若不为0,需要将2加一变为3,进入下个循环。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
七:取近似值
题目:写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
思路:加上0.5后取整即可
代码如下:
1 2 3 4 5 6 7 8 9 |
|
八:合并表记录
题目:数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出
思路:由于测试用例不超过1000,故可以延续”明明的随机数“的思路,申请一个长度为1000的数组,但注意到一旦输入key值相同则将value 累加到a[key],随后遍历输出即可
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
九:提取不重复的整数
题目:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
思路:整数只有10个,开辟一个长度为10 的标记数组,初始化为0,每次进行判断,第一次肯定不重复为零,然后将标记加一,随后每次判断,若标记不为零,代表以经重复,不累加计算。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
十:字符个数统计
题目:编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。
思路:仍然延续前面的思路,开辟一个长度为128 的标记数组,随后累加标记值不为一的个数即可。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
十一:数字颠倒
题目:输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
思路:调用系统函数,注意要引用algorithm库
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
十二:字符串反转
题目:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
思路:调用系统函数即可
代码如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
十三:句子逆序
题目:将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
思路:类同11,12,不过是类型换位了string类型,我们调用容器即可。注意到用空格隔开,而最后一个字符后没有空格。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
十四:字串的链接最长路径查找
题目:给定n个字符串,请对n个字符串按照字典序排列。输入第一行为一个整数记录数字个数,第二行为数据。
思路:仍然是调用系统函数进行排序,主要是正确使用容器即可。先将输入的字串装入容器,利用系统函数排序,我们可以将代码中的vector<string>::iterator p中的p 视为指针指向每一个字串,随后顺序输出即可
代码如下:</string>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
十五:求int型整数在内存中存储时1的个数
题目:输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
思路:内存中的数都是0101即二进制,我们将其转换成二进制即可,”除2取余,倒序排序,高位补零“但我们不用这么麻烦,每次取余不为零时可知二进制中必有1,此时计数即可。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
总结
做了那么多题,每一个题都有不同的解决方案,更重要的还是思路,多想多做,加油!
小编还整理了更多JAVA面试题:戳这里免费领取,暗号:CSDN,还有更多大厂面试专题资料和视频哦!
写文不易,觉得有帮助还请点赞关注支持一下小编,也欢迎各位大佬提出问题,感谢!!!