华为OD机试题

1.猴子登山:有N个台阶,0<N<=50, 猴子每次只跳1个或者3个台阶,输入N, 输出猴子有多少种方式到达台阶终点

2.组队问题:第一行输入一个数字n,表示第二行数字的个数,第二行输入n个正整数,第三行输入一个整数,
要示输出是:第二行中,可以是1个数,也可以是2个数字之和,要大于等于第三行的数,找出最大的组合数量。第二行中每个数最多只能组合一次
例:
输入
5
3 1 5 7 9 
8
输出
3

3. 第一行输入一个数字N, N为不超过26的正整数,表示字符串由前N个字母组成,3就表示字符串只能是a,b,c3个字母组成
第二行输入一个字符串,长度随机,字符都包含在第一行数字规定的前N个字母里
要示输出,依字典序查找,比第二行字符串要大的,第一个不包括回文串的字符串
例:
输入:
3
cba
输出:
NO

输入:
5
cba
输出:
cbd


第一题大脑短路了,用解方程之后排列组合的搞法,搞吐血了也没对,后来想通了递归5分钟不到就完成了,白白浪费了一个多小时时间,导致后面第二题,第三题时间不够,就过了一道

#华为机试##华为##笔试题目#
全部评论
第一题动态规划不就是确定a[0],a[1],a[2],后面直接a[n]=a[n-1]+a[n-2]+a[n-3],或者直接来个条件判断也行。如果用递归没用好,而且N比较大的话,直接给你栈溢出。😏 第二题就是滑动数组,双指针写。 第三题没看懂楼主的意思,感觉是字符串处理,但不含有回文子串还是回文串我就不清楚了,回文子串可能会比较难,回文串就相当简单了。
2 回复 分享
发布于 2021-03-11 19:25
第一题可以用动态规划的吧。。。
2 回复 分享
发布于 2021-03-11 11:38
OD岗位需要性格测试吗
1 回复 分享
发布于 2021-03-27 00:31
第三题看成N进制的问题,循环加1,满足条件或者溢出停止,这样不就能找出最先出现的了,进位问题处理好,判断子串
1 回复 分享
发布于 2021-03-14 19:10
第一题,DP,状态方程:dp[i] = dp[i - 1] + dp[i - 3] 第二题,排序后从第一位开始找满足条件的最小数,可二分查找。 第三题,先找出字符串中第一个构成回文的index,比如"abcecba"中index为4的'c&(2248)#39;,然后让这一位加1破坏回文,这一位之后的字符全重置为'a&#39;保证最小。循环这种操作直到没有回文子串出现。 例子: "abcdcbea"  N=5 1.找到index=4的'c&(2248)#39;,字符串变为:abcddaaa 2.找到index=4的'd&#39;,字符串变为:abcdeaaa 3.找到index=6的'a&(417)#39;,字符串变为:abcdeaba 4.找到index=7的'a&#39;,字符串变为:abcdeabb 5.找到index=7的'b&(1071)#39;,字符串变为:abcdeabc 字符串找第一位回文子串条件: char[i] == char[i - 1] || char[i] == char[i - 2] 先把字符串转成字符数组,处理方便。 全重置为'a&#39;的方法还可以优化。
10 回复 分享
发布于 2021-03-19 10:22
和我一摸一样的题😅
点赞 回复 分享
发布于 2022-03-28 12:39
public class Test4 {     public static void main(String[] args) {         System.out.println(xx(50));     }     public static int xx(int step){         if(step == 1){             return 1;         }else if(step == 2){             return 1;         }else if(step == 3){             return 2;         }         return xx(step-1)+xx(step-3);     } }
点赞 回复 分享
发布于 2021-11-20 21:26
第三题补充几个小函数: char charPlusPlus(char c) { return (c + 1); } char charmo(char a,char b) { return  ((a-'a&(417)#39;)%(b-'a&(417)#39;) + 'a&#39;); } int chardivid(char a, char b) { return a/b; } bool isNoPalindrome(string s) { bool ret = true; if (s.size() < 2) { return true; } for (int l = 2; l <= s.size(); l++) { for (int i = 0; i + l -1 < s.size(); i++) { string tmp = s.substr(i, l); string tmp1 = tmp; reverse(tmp1.begin(), tmp1.end()); if (tmp == tmp1) { return false; } } } return ret; }
点赞 回复 分享
发布于 2021-05-21 16:34
第三题做了个字符串加法,但感觉有简单的方法: string max_string(int num, int k) { char max = 'a&(417)#39; + char(k - 1); return string(num, max); } string stringPlusPlus(string s, int k) {  char max = 'a&(417)#39; + char(k - 1);  char over = charPlusPlus(max);  string max_s = max_string(s.size(), max);  char cur;  int carry;  if (s == max_s)  {   return max_s + 'a&(417)#39;;  }  for (int i = s.size() - 1; i >= 0; i--)  {   if (i == s.size() - 1)   {    cur = s[i]+1;    s[i] = charmo(cur,over);    carry = chardivid(cur,over);   }   else   {    if (carry)    {     cur = s[i] + carry;     s[i] = charmo(cur, over);     carry = chardivid(cur, over);    }   }  }  return s; } int main() {  string input("cba");  int k = 5;  while (1)  {   input = stringPlusPlus(input, k);   if (isNoPamlid(input))   {    cout << "************success**************" << endl;    cout << input << endl;    break;   }   else if (input.size() > 2&& input.substr(0,2) == max_string(2,k))   {    cout << "none" << endl;    break;   }  }  return 0; }
点赞 回复 分享
发布于 2021-05-21 16:26
问下楼主机考的成绩算通过了么?我下周也需要面试OD😂,谢谢
点赞 回复 分享
发布于 2021-03-26 14:20
第三题大脑烧了都想不到什么好的方法。。。。
点赞 回复 分享
发布于 2021-03-12 12:08
OD是什么?不是华为直聘吗?
点赞 回复 分享
发布于 2021-03-11 09:55
华为笔试时长多少呀
点赞 回复 分享
发布于 2021-03-11 00:36
楼主是科软的吗
点赞 回复 分享
发布于 2021-03-10 22:52

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
评论
9
92
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务