华为实习生招聘-2014.03 本人菜鸟,求不喷

题目一:
umin, umax,ustep,输入方式是逗号相隔,求以最小值为开始,固定步长的各值至最大值的一个算式累加!最小值最大值必须计算,这里简化为累加!
解答
通过 scanf("%umin,%umax,%ustep);获取输入,
for(i=0;umin+i*ustep〈umax;i++)
res += umin +i*ustep;
res += umax;

心理历程及当时解法:
首先对scanf就很不熟悉,对于c++来说,一般都用cin,而cin做不到输入格式控制,当时很揪心的一点就是这个东西,这个想了很多方法,包括专门用字符数组的某一位来接收逗号,而整个输入用getline来获取,但是当时的决定是先用cin实现功能,那个时候真是太看重这个华为实习事情,着急的连VC环境都没去找,第一次真是尴尬!看到旁边的人用才晓得好东东,可以调试!!!可以说一看到那个死的心都有了,很不爽,一方面怪自己没注意(核动力对printf研究过,唯独没注意scanf),另一方面也怪华为说C++,怎么有C,现在想来好幼稚,只是同样的题你通过JAVA还是C++做出来就行,问题也是,只要解决了,代码不重要!!
当时因为输入的问题心烦意乱,对于最后一个数的参与运算竟然也考虑了很久,还专门去判别步长是否正好间隔至最大值,正好则数组长度为(umax-umin)/ustep的+1,如果不正好+2,还定义了数组,由于长度是变量,还用了new操作符,而最后竟然忘了delete,真是惨不忍睹!!!!!!花了近1小时!!!!!

题目二:
第二题是网络协议背景的十六转十进制,即输入18 12 00 0a,你要解析出为对应的十进制,即24等等,18是一个,12是一个,00 0a合起来是一个,也就是题中说的协议类型占一个字节,端口占一个字节,而上传速率占(其实是4字节,这里简化一下)2字节,这个题要求内存和速率,很显然笨方法不行!这个对心理压力也是很大!!
解法:这个题其实也可以用scanf("%x %x",&i,&ii)而很简单的完成,但是……
#include <iostream>
using namespace std;

void main()
{
     int a,b,c,d;
     //scanf("%d %d", &a, &b);//space Enter 都行,","则无法赋值给b,b为不确定值
     //scanf("%d,%d", &a, &b);//输入必须为“,”,space Enter无法赋值给b, 都行,","则无法赋值给b,b为不确定值
     scanf("%x %x     %x", &a, &b, &c);//中间是什么就是什么!如??,或者中文的。,但多空格则CR和SP都行
     d = b * 16 * 16 + c;
     printf("%d,%d\n", a, d);
}
心理历程及当时解法:
这道题一看完全想放弃了,进制转换手头算行,程序真心无语,而且要用巧妙的算法,着实好为难!心想这次终于认清了自己,也明白师兄师姐说的考试都是字符字符串,很基本的,!可惜不会,当时也不知道哪来的一股劲,说自己尽力即好,就死心塌地想办法了,用了很笨的方法,switch方法去判别字符以实现16~10的转换!!!还用乘基数的方法实现,真是对自己无语,总算做出来了,可系统无法登陆了,1点到3点10分,2点50没问题了,一直弄电脑,真是悲催!!!后面换了电脑,很慌张地提交,心想完了完了!!

总结:
第一次面试中的一个环节就这样开始了,很慌张很谦逊,特别重视珍惜这次机会,认清了自己,也明白了一些道理,突然发现自己很缺东西,该看的书该学的东西该测试的例子太多太多,也终于想踏踏实实做项目,提高自己,不会再好高骛远,搞虚的水的东西!!然后也被打击的谦卑了很多!!

对了,还有在笔试前有个华为的环境熟悉,也是3道题:
题目1:

我的代码:
#include<iostream>
using namespace std;

void main()
{
     char ch[99999];
     double res = 0.0;

     double to_hash(char ch1[], int index);

     cout<<"input your string"<<endl;
     cin>>ch;

     if ('\0' == ch[1])
     {
          res = ch[0] * 31;
          cout<<res<<endl;
          return;
     }

     int i = 0;
     while(ch[i] != '\0')
     {
          i++;
     }

     i--;

     res = to_hash(ch, i);
     cout<<res<<endl;
     return;

}

double to_hash(char ch1[], int index)
{
     if(index <= 1)
     {
          return ch1[0] * 31 + ch1[1];
     }
     else
     {
          return to_hash(ch1, index-1) * 31 + ch1[index];
     }
}
题目二三:



第二三道题:没做!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值