题目一:
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小时!!!!!
当时因为输入的问题心烦意乱,对于最后一个数的参与运算竟然也考虑了很久,还专门去判别步长是否正好间隔至最大值,正好则数组长度为(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];
}
}
题目二三:
第二三道题:没做!!