当前位置:文档之家› 华为机试oj练习题2014

华为机试oj练习题2014

华为机试oj练习题2014
华为机试oj练习题2014

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用= 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。

首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下:

#include //注意这里不是string.h string.h是C字符串头文件

读入一行字符:getline(cin,str);

1.声明一个C++字符串

声明一个字符串变量很简单:

string Str;

这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:

a) string s; //生成一个空字符串s

b) string s(str) //拷贝构造函数生成str的复制品

c) string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值

d) string s(str,stridx,strlen) //将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值

e) string s(cstr) //将C字符串作为s的初值

f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。

g) string s(num,c) //生成一个字符串,包含num个c字符

h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值

i) s.~string() //销毁所有字符,释放内存

都很简单,我就不解释了。

2.字符串操作函数

这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。

a) =,assign() //赋以新值

b) swap() //交换两个字符串的内容

c) +=,append(),push_back() //在尾部添加字符

d) insert() //插入字符

e) erase() //删除字符

f) clear() //删除全部字符

g) replace() //替换字符

h) + //串联字符串

i) ==,!=,<,<=,>,>=,compare() //比较字符串

j) size(),length() //返回字符数量

k) max_size() //返回字符的可能最大个数

l) empty() //判断字符串是否为空

m) capacity() //返回重新分配之前的字符容量

n) reserve() //保留一定量内存以容纳一定数量的字符

o) [ ], at() //存取单一字符

p) >>,getline() //从stream读取某值

q) << //将谋值写入stream

r) copy() //将某值赋值为一个C_string

s) c_str() //将内容以C_string返回

t) data() //将内容以字符数组形式返回

u) substr() //返回某个子字符串

v)查找函数

w)begin() end() //提供类似STL的迭代器支持

x) rbegin() rend() //逆向迭代器

y) get_allocator() //返回配置器

下面详细介绍:

2.1 C++字符串和C字符串的转换

C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string 或字符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。由于只是简单介绍,详细介绍掠过,谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。

2.2 大小和容量函数

一个C++字符串存在三种大小:a)现有的字符数,函数是size()和length(),他们等效。Empty()用来检查字符串是否为空。

b)max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常c)capacity()重新分配内存之前string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。

还有必要再重复一下C++字符串和C字符串转换的问题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数Connect(char*,char*)),但别人的函数参数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么,这时候我们的处理方式是:如果此函数对参数(也就是char*)的内容不修改的话,我们可以这样Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的(有兴趣地可以自己试一试),所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈祷现在仍然使用C字符串进行编程的高手们(说他们是高手一点儿也不为过,也许在我们还穿开裆裤的时候他们就开始编程了,哈哈…)写的函数都比较规范,那样我们就不必进行强制转换了。

2.3元素存取

我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range 异常。

有一个例外不得不说,const string a;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。举例如下:

const string Cstr("const string");

string Str("string");

Str[3]; //ok

Str.at(3); //ok

Str[100]; //未定义的行为

Str.at(100); //throw out_of_range

Str[Str.length()] //未定义行为

Cstr[Cstr.length()] //返回‘\0’

Str.at(Str.length());//throw out_of_range

Cstr.at(Cstr.length()) ////throw out_of_range

我不赞成类似于下面的引用或指针赋值:

char& r=s[2];

char* p= &s[3];

因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。

2.4比较函数

C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如str<"hello")。在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string ("aaaa")

另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等〉0-大于<0-小于。举例如下:

string s("abcd");

https://www.doczj.com/doc/a57256855.html,pare("abcd"); //返回0

https://www.doczj.com/doc/a57256855.html,pare("dcba"); //返回一个小于0的值

https://www.doczj.com/doc/a57256855.html,pare("ab"); //返回大于0的值

https://www.doczj.com/doc/a57256855.html,pare(s); //相等

https://www.doczj.com/doc/a57256855.html,pare(0,2,s,2,2); //用"ab"和"cd"进行比较小于零

https://www.doczj.com/doc/a57256855.html,pare(1,2,"bcx",2); //用"bc"和"bc"比较。

怎么样?功能够全的吧!什么?还不能满足你的胃口?好吧,那等着,后面有更个性化的比较算法。先给个提示,使用的是STL 的比较算法。什么?对STL一窍不通?靠,你重修吧!

2.5 更改内容

这在字符串的操作中占了很大一部分。

首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

s.assign(str); //不说

s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串

s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s

s.assign("gaint"); //不说

s.assign("nico",5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串

s.assign(5,’x’);//把五个x赋给字符串

把字符串清空的方法有三个:s="";s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。

string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。

先说增加字符(这里说的增加是在尾巴上),函数有+=、append()、push_back()。举例如下:

s+=str;//加个字符串

s+="my name is jiayp";//加个C字符串

s+=’a’;//加个字符

s.append(str);

s.append(str,1,3);//不解释了同前面的函数参数assign的解释

s.append(str,2,string::npos)//不解释了

s.append("my name is jiayp");

s.append("nico",5);

s.append(5,’x’);

s.push_back(‘a’);//这个函数只能增加单个字符对STL熟悉的理解起来很简单

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。

s.insert(0,"my name");

s.insert(1,str);

这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式(让人恶心)。既然你觉得恶心,那就不得不继续读下面一段话:为了插入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:insert(size_type

index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, ’j’);这时候第一个参数将转换成哪一个呢?所以你必须这么写:

inse rt((string::size_type)0,1,’j’)!第二种形式指出了使用迭代器安插字符的形式,在后面会提及。顺便提一下,string有很多操作是使用STL的迭代器的,他也尽量做得和STL靠近。

删除函数erase()的形式也有好几种(真烦!),替换函数replace()也有好几个。举例吧:

string s="il8n";

s.replace(1,2,"nternationalizatio");//从索引1开始的2个替换成后面的C_string

s.erase(13);//从索引13开始往后全删除

s.erase(7,5);//从索引7开始往后删5个

2.6提取子串和字符串连接

题取子串的函数是:substr(),形式如下:

s.substr();//返回s的全部内容

s.substr(11);//从索引11往后的子串

s.substr(5,6);//从索引5开始6个字符

把两个字符串结合起来的函数是+。(谁不明白请致电120)

2.7输入输出操作

1.>> 从输入流读取一个string。

2.<< 把一个string写入输出流。

另一个函数就是getline(),他从输入流读取一行内容,直到遇到分行符或到了文件尾。

2.8搜索与查找

查找函数很多,功能也很强大,包括了:

find()

rfind()

find_first_of()

find_last_of()

find_first_not_of()

find_last_not_of()

这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下:

第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数。比较简单,不多说不理解的可以向我提出,我再仔细的解答。当然,更加强大的STL搜寻在后面会有提及。

最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较(如:if(s.find("jia")== string::npos))。

1、判断一个数是不是回文数,回文数为类似12321,4321234,987656789,12344321,186681 #include

//#include

using namespace std;

int main(void)

{

int i=0,n,len;

cin>>n;

int a[20]={0};

while(n!=0)

{

a[i]=n%10;

n=(n-a[i])/10;

i++;

}

len=i;

for(i=1;i<=len/2;i++)

{

if(a[i-1]!=a[len-i])

break;

}

if(i==len/2+1)

{

cout<<"Yes\n";

}

else

cout<<"No\n";

return 0;

}

#include

#include

using namespace std;

int main(void)

{

int i=0,len=0;

string s;

cin>>s;

while(s[i]!=0)

{

i++;

}

len=i;

//len=s.size();

for(i=1;i<=len/2;i++)

{

if(s[i-1]!=s[len-i])

break;

}

if(i==len/2+1)

{

cout<<"Yes\n";

}

else

cout<<"No\n";

return 0;

}

##########################

3、一群人围城一圈,编号为1~N,有一个确定数A,从1号开始报数,每逢编号为A的倍数该人出列,要求按照顺序输出出列的人的编号

比赛题:

第一题:有个自动售货机会自己找零,能塞进去以及吐出来的钱的面额为1、5、10、20、50、100,输如用户塞进去钱的面额和商品价格,要求输出找零信息,也就是说1、5、10、20、50、100各多少个

例子:

输入

89

100

输出

1 0 1 0 0 0

#include

#include

using namespace std;

int main(void)

{

int i=0,price,total,change,a[6]={1,5,10,20,50,100},a1[6]={0};

cin>>price>>total;

change=total-price;

if(change!=0)

{

for(i=1;i<=6;i++)

{

a1[6-i]=change/a[6-i];

change=change-a1[6-i]*a[6-i];

}

}

for(i=1;i<=6;i++)

cout<

cout<<'\n';

return 0;

}

1.求int型数据在内存中存储时1的个数

输入一个int型数据,计算出该int型数据在内存中存储时1的个数。

#include

using namespace std;

int GetCount(int num)

{

/*在这里实现功能*/

int m=0;

while(num)

{

num &=(num-1);

m++;

}

return m;

}

int main()

{

int a;

cin>>a;

cout<

}

2.句子逆序

将一个英文语句以单词为单位逆序排放。例如―I am a boy‖,逆序排放后为―boy a am I‖所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

#include

using namespace std;

void RS(char *bp, char *ep)

{

while(bp < ep)

{

char tem = *bp;

*bp = *ep;

*ep = tem;

bp++;

ep--;

}

}

char* Reverse(char *s)

{

int len = strlen(s);

char *es = s + len -1;

RS(s,es);

char *p1 = s;

char *p2 = s;

while( *p2 != '\0')

{

while(*p2 != '\0' && *p2 != ' ')

p2++;

RS(p1,p2-1);

if( *p2 == ' ' && *p2 != '\0')

{

p2++;

p1 = p2;

}

}

return s;

}

int main()

{

char str[500];

gets(str);

cout<

}

3.字符串反转

写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。#include

using namespace std;

int Reserve(char *str)

{

int len=strlen(str);

char *begin,*end;

begin=str;

end=begin+len-1;

if(str!=NULL)

{

while(begin

{

char temp;

temp=*begin;

*begin=*end;

*end=temp;

begin++;

end--;

}

}

return 0;

}

int main()

{

char str1[100];

gets(str1);

Reserve(str1);

puts(str1);

}

4.数字颠倒

描述:

输入一个整数,将这个整数以字符串的形式逆序输出

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

5.字符个数统计

编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。#include

#include

using namespace std;

int main()

{

string str;

int len,count=0;

getline(cin,str);

len=str.size();

for(int i=0; i

{

int flag=1;

if (str[i]>=0 &&str[i]<=127)

{

for(int k=i+1; k

if(str[k]==str[i])

{

flag=0;

break;

}

if(flag)

count++;

}

}

cout<

return 0;

}

6.提取不重复的整数

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

#include

using namespace std;

int main()

{

char a[100],b[100];

gets(a);

int len=strlen(a);

for(int i=0;i

{

char temp;

temp=a[i];

a[i]=a[len-1-i];

a[len-1-i]=temp;

}

b[0]=a[0]; //去掉a中重复的数字赋给b数组

int j=0;

for(int i=0;i

{

int flag=1;

for(int k=0;k

{

if(a[i]==b[k])

flag=0;

}

if(flag)

{

j=j+1;

b[j]=a[i];

}

}

int lenb=j+1; //数组b的长度

int sum=0,quan=1;

for(int i=lenb-1;i>=0;i--) //输出最终的数字

{

sum+=(b[i]-48)*quan;

quan*=10;

}

cout<

}

7.合并表记录

数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和#include

#include

using namespace std;

struct Record

{

int Index;

int Value;

};

bool cmp(const struct Record a,const struct Record b)

{

return a.Index

}

int main()

{

int N;

struct Record array[100];

cin>>N;

int flag=N;

for(int i=0; i

cin>>array[i].Index>>array[i].Value;

sort(array,array+N,cmp);

//for(int i=0; i

//cout<

for(int i=0; i

if(array[i].Index==array[i+1].Index)

{

array[i+1].Value=array[i].Value+array[i+1].Value;

}

else

{

cout<

cout<

}

return 0;

}

8.取近似值

写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

#include

using namespace std;

int main()

{

double a;

cin>>a;

if (a>=0)

cout<<(int)(a+0.5);

else

cout<<(int)(a-0.5);

}

9.质数因子

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )#include

using namespace std;

void getResult(long int input)

{

for (int i=2;i<=input;i++)

{

while((0==input%i)&&input!=0)

{

cout<

input=input/i;

}

}

}

int main()

{

int a;

cin>>a;

getResult(a);

return 0;

}

10.进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串

#include

using namespace std;

int main()

{

char a[10];

gets(a);

int len=strlen(a);

int sum=0,quan=1;

for(int i=len-1;i>1;i--)

{

if(a[i]>='0' &&a[i]<='9')

{

sum=sum+(a[i]-48)*quan;

quan=quan*16;

}

else if (a[i]>='A' &&a[i]<='F')

{

sum+=(a[i]-55)*quan;

quan*=16;

}

else if(a[i]>='a' &&a[i]<='f')

{

sum+=(a[i]-87)*quan;

quan*=16;

}

}

cout<

}

11.字符串分隔

?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;

?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

#include

using namespace std;

int main()

{

char str1[100],str2[100];

gets(str1);

gets(str2);

while (1)

{

if (strlen(str1)>8)

{

for (int i=0;i<8;i++)

cout<

cout<

for (int i=0;i

str1[i]=str1[i+8];

str1[strlen(str1)-8]='\0';

}

if (strlen(str1)<8)

{

cout<

for (int i=0;i<8-strlen(str1);i++)

cout<<"0";

cout<

break;

}

}

while (1)

{

if (strlen(str2)>8)

{

for (int i=0;i<8;i++)

cout<

cout<

for (int i=0;i

str2[i]=str2[i+8];

str2[strlen(str2)-8]='\0';

}

if (strlen(str2)<8)

{

cout<

for (int i=0;i<8-strlen(str2);i++)

cout<<"0";

cout<

break;

}

}

return 0;

}

12.明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成―去重‖与―排序‖的工作。

#include

#include

using namespace std;

#define Max 1000

int main()

{

int ncount[Max]={0};

int n; //随机整数的个数

cin>>n;

vector array(n); //声明变长数组

for(int i=0;i

{

cin>>array[i];

}

for (int i=0;i

{

if(array[i]!=0)

ncount[array[i]]=1;

}

for (int i=0;i

{

if (ncount[i])

cout<

}

return 0;

}

13.计算字符个数

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写

#include

using namespace std;

int count(char *str,char a)

{

int num=0;

if(str!=NULL)

{

while(*str!='\0')

{

if(*str==a)

num++;

str++;

}

}

return num;

}

int main()

{

char array[100],a;

gets(array);

cin>>a;

cout<

return 0;

}

14.求最小公倍数

正整数A和正整数B 的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

#include

using namespace std;

int gdc(int x,int y)

{

return (!y)?x:gdc(y,x%y);

}

int main()

{

int a,b;

cin>>a;

cin>>b;

cout<<(a*b)/gdc(a,b)<

return 0;

}

15.求解立方根

?计算一个数字的立方根,不使用库函数

#include

#include

#define E 0.0001 //精度设置

using namespace std;

double getCubeRoot(double num)

{

double x0=num;

double result;

while (1)

{

result=x0-(x0*x0*x0-num)/(3*x0*x0);

if (result*result*result-num-E)

return result;

else

x0=result;

}

}

int main()

{

int number;

cin>>number;

cout<< fixed << showpoint << setprecision(1)<

}

16.字符逆序

将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。如:输入―I am a student‖,输出―tneduts a ma I‖。

#include

#include

int ProcessString(char * strInput,char * strOutput)

{

int len=(int) strlen(strInput);

char *start = strInput;

char *end = strInput + len - 1;

char ch;

if (strInput != NULL)

{

while (start < end)

{

ch = *start;

*start++ = *end;

*end-- = ch;

}

}

strcpy(strOutput, strInput);

return 0;

}

int main()

{

char str[100],output[100];

gets(str);

ProcessString(str,output);

puts(output);

}

17.记负均正

从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值#include

#include

#include

using namespace std;

int main()

{

int countfu=0;

int count=0;

int sum=0;

double average=0;

vector a;

int m;

while(cin>>m)

{

a.push_back(m);

}

int len=a.size();

for(int i=0; i

{

if(a[i]<0)

countfu++;

else if(a[i]>=0)

{

sum+=a[i];

count++;

}

}

average=double(sum)/count;

cout<

if(sum==0)

cout<<"0.0"<

else if (sum%(count)==0)

cout<

else

cout<< fixed<

}

18.字符串分割

连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,#include

using namespace std;

void CoutString(char a[])

{

int len=strlen(a);

int flag=0;

while(len>0)

{

if(len<=8)

{

for(int i=0; i

cout<

for(int i=len+8*flag; i<8+8*flag; i++)

cout<<'0';

cout<

break;

}

else

{

for(int i=0+8*flag; i<8+8*flag; i++)

cout<

cout<

len-=8;

flag++;

}

}

}

int main()

{

int N;

int count=0;

cin>>N;

char a[100][100];

while (count<=N)

华为校园招聘上机题

目录 样题-初级题:从考试成绩中划出及格线 (2) 样题-中级题:亮着电灯的盏数 (2) 样题-高级题:地铁换乘 (3) 8.29去掉最大值、最小值之后剩下的个数 (3) 8.29从5个人中选取2个人作为礼仪 (4) 8.29验证括号是否匹配 (5) 8.31回文数 (5) 8.31将第一行中含有第二行中“23”的数输出并排序 (6) 8.31翻译电话号码 (6) 9.1.AM 将整数倒序输出,剔除重复数据 (7) 9.1.AM 大数相减 (8) 9.1.AM 判断if语句括号是否合法 (8) 9.1.PM (8) 9.1.PM (9) 9.1.PM (9)

样题-初级题:从考试成绩中划出及格线 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为60分 样题-中级题:亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。 有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。 注:电灯数和学生数一致。 样题-高级题:地铁换乘 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 8.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。 (其中最大值与最小值可能有多个) Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3 8.29从5个人中选取2个人作为礼仪 2、要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要

2016华为硬件机试题库

华为硬件机试题目(2016版本) 1.(判断题)DRAM上电时存储单元的内容是全0,而Flash上电时存储单元的内容是全1。(4分)? A.正确? B.错误 2.(判断题)眼图可以用来分析高速信号的码间干扰、抖动、噪声和衰减。(4分)? A.正确? B.错误 3.(判断题)以太网交换机将冲突域限制在每个端口,提高了网络性能。(4分)? A.正确? B.错误 4.(判断题)放大电路的输出信号产生非线性失真是由于电路中晶体管的非线性引起的。(4分)? A.正确? B.错误 5.(判断题)1的8位二进制补码是0000_0001,-1的8位二进制补码是 1111_1111。(4分)?

B.错误 6.(判断题)洗衣机,电冰箱等家用电器都使用三孔插座,是因为如果不接地,家用电器是不能工作的。(4分)? A.正确? B.错误 7.(判断题)十进制数据0x5a与0xa5的同或运算结果为:0x00。(4分)? A.正确? B.错误 8.(判断题)硅二极管的正向导通压降比锗二极管的大(4分)? A.正确? B.错误 9.(单选题)一空气平行板电容器,两级间距为d,充电后板间电压为u。然后将电源断开,在平板间平行插入一厚度为d/3的金属板。此时电容器原板间电压变为(4分)? A.U/3? B.2U/3? C.3U/4?

10.(单选题)8086CPU内部包括哪些单元(4分)? A.ALU,EU? B.ALU,BIU? C.EU,BIU? D.ALU,EU,BIU 11.(单选题)为了避免50Hz的电网电压干扰放大器,应该用那种滤波器:(4分)? A.带阻滤波器? B.带通滤波器? C.低通滤波器? D.高通滤波器 12.(单选题)关于SRAM和DRAM,下面说话正确的是:(4分)? A.SRAM需要定时刷新,否则数据会丢失? B.DRAM使用内部电容来保存信息? C.SRAM的集成度高于DRAM? D.只要不掉点,DRAM内的数据不会丢失 13.(单选题)在RS232串口中,采用哪一种校验方式:(4分)?

华为上机题汇总111题

注:1.本文代码仅保证在visual studio 2005上运行通过! 2.高亮的题目为华为机试第三题左右难度。 3.本文的字符串基本运用C++里的string类,很少使用常规字符数组形式。 4.freopen()为输入重定向,方便测试,具体用法问度娘。 1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A, 如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*inpu,char*output) 其中input是输入字符串,output是输出字符串 #include #include #include using namespace std; void stringchang(const char*,char*); int main() { char input[100],output[100]; cin.getline(input,100); stringchang(input,output); cout<

华为公司治理结构含清晰组织结构图

华为公司治理结构含清晰组织结构图 文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)

股东会是公司最高权力机构,对公司增资、利润分配、选举董事/监事等重大事项作出决策。 董事会是公司战略和经营管理的决策机构,对公司的整体业务运作进行指导和监督,对公司在战略和运作过程中的重大事项进行决策。 监事会主要职责包括内外合规监督,检查公司财务和公司经营状况,对董事、高级管理人员执行职务的行为和董事会运作规范性进行监督。 公司实行董事会领导下的轮值CEO制度,轮值CEO在轮值期间作为公司经营管理以及危机管理的最高责任人,对公司生存发展负责。 自2000年起,华为聘用毕马威作为独立审计师。审计师负责审计年度财务报表,根据会计准则和审计程序,评估财务报表是否真实和公允,对财务报表发表审计意见。 公司设立基于客户、产品和区域三个纬度的组织架构,各组织共同为客户创造价值,对公司的财务绩效有效增长、市场竞争力提升和客户满意度负责。

运营商BG和企业BG是公司分别面向运营商客户和企业/行业客户的解决方案营销、销售和服务的管理和支撑组织,针对不同客户的业务特点和经营规律提供创新、差异化、领先的解决方案,并不断提升公司的行业竞争力和客户满意度;消费者BG 是公司面向终端产品用户的端到端经营组织,对经营结果、风险、市场竞争力和客户满意度负责。 产品与解决方案是公司面向运营商及企业/行业客户提供ICT融合解决方案的组织,负责产品的规划、开发交付和产品竞争力构建,创造更好的用户体验,支持商业成功。 区域组织是公司的区域经营中心,负责位于区域的各项资源、能力的建设和有效利用,并负责公司战略在所辖区域的落地。公司持续优化区域组织,加大、加快向一线组织授权,指挥权、现场决策权逐渐前移至代表处。区域组织在与客户建立更紧密的联系和伙伴关系、帮助客户实现商业成功的同时,进一步支撑公司健康、可持续的有效增长。 集团职能平台是聚焦业务的支撑、服务和监管的平台,向前方提供及时准确有效的服务,在充分向前方授权的同时,加强监管。

华为校园招聘电子科大上机题目

华为校园招聘电子科大上机题目 一.题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个 相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串 等长;【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输 出示例输入:“deefd” 输出:“def” 输入:“afafafaf” 输出:“af” 输入:“pppppppp” 输出:“p” main函数已经 隐藏,这里保留给用户的测试入口,在这里测试你的实现函数, 可以调用printf打印输出当前你可以使用其他方法测试,只要 保证最终程序能正确执行即可,该函数实现可以任意修改,但是 不要改变函数原型。一定要保证编译运行不受影响。 二.题目描述(40分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席 的重复字母进行压缩,并输出压缩后的字符串。

压缩规则: 1.仅压缩连续重复出现的字符。比如字符串“abcbc“由于无连续重复字符,压缩后的字符串还是“abcbc“。 2.压缩字段的格式为“字符重复的次数+字符“。例如:字符串“xxxyyyyyyz“压缩后就成为“3x6yz“。 要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“cccddecc” 输出:“3c2de2c” 输入:“adef” 输出:“adef” 输入:“pppppppp” 输出:“8p” 三.题目描述(50分):通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1.操作数为正整数,不需要考虑计算结果溢出的情况。 2.若输入算式格式错误,输出结果为“0”。

华为机试题目参考1

华为南京地区校园招聘软件类上机考试说明同学您好! 欢迎您应聘华为公司。软件研发类岗位(软件研发、云计算、操作系统开发、数据库开发)需要提前进行上机考试。现将上机考试做如下说明。 一、题目类别 本次上机考试题目设置C/C++、Java两个类别,根据个人情况选作一个类别。 二、题目数量 每个考生有三道题,第一二道题必答,第三道题为附加题可以选作,附加题做出,成绩会计入总分。 三、考试时间安排 1、简历筛选后,从9月17日开始分批安排上机考试 2、每个考生上机考试时间为2小时 一、上机考试步骤 1、打开IE输入服务器的IP地址或者直接打开收藏夹中已经收藏好的地址; 2、输入姓名和手机号,选择考试语言,提交登录: 3、登录后会进入试题说明页面,考试阅读完试题要求后,在页面下方点击下载试题框架并解压到D盘。如果是C/C++则用VC打开工程进行编程,只在func.cpp文件中进行函数编写,函数名已经定义好;如果是Java则用Eclips打开Java工程进行编程,只在SWTest.java文件中进行函数编写,函数名已经定义好。注意,考生不要进行任何IO输入输出的处理(题目说明中已经有写了),否则会得0分。 4、编完代码并编译和调试通过后,点击试题页面下方的按钮,在弹出的窗口中,如果是C/C++则将test.exe和func.cpp拷贝到一个名为test的目录中然后打包该目录上传,如果是Java则将工程仍然打包为SWTest.rar一次性上传(这个过程非常重要,否则会因无法自动判卷而得0分)。上传之后页面会显示“提交成功”,然后关闭所有IE窗口并清空客户机中您所创建的所有内容后结束考试离开考场。 二、如何阅卷 1、考生提交试卷后,我们在服务器后台执行系统阅卷程序,进行自动判卷,不进行人工阅卷。 2、系统设置了多个测试用例,根据用例执行的情况判断考生所上机考试的分数。 三、样题 编写一个函数,统计出具有n个元素的一维数组中大于等于所有元素平均值的元素的个数并返回。 预祝您上机考试顺利! 华为南京校园招聘组 2011年9月 2012华为校园招聘机试(成都) 1.选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数, judge_type[]里存储与score[]数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数分别取一个平均分(平均分取整),然后,总分= 专家分*0.6 + 大众评委*0.4,总分取整。如果没有大众评委,则总分= 专家评委平均分,总分取整。函数最终返回选手得分。 函数接口:int cal_score(int score[],int judge_type[],int n) #include #include

华为成都上机笔试题

2010年华为软件校园招聘编程测 类别:软件C语言 编程题(共2题,第一题40分,第二题60分,共100分。请上机编写程序,按题目要求提交文件。[详见考试说明] 本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。 1. 删除字符串中所有给定的子串(40分) 问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。 要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *result_str) 【输入】str:输入的被操作字符串 sub_str:需要查找并删除的特定子字符串 【输出】result_str:在str字符串中删除所有sub_str子字符串后的结果 【返回】删除的子字符串的个数 注: I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果 匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。II、输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。 示例

输入:str = "abcde123abcd123" sub_str = "123" 输出:result_str = "abcdeabcd" 返回:2 输入:str = "abcde123abcd123" sub_str = "1234" 输出:result_str = "abcde123abcd123" 返回:0 2. 高精度整数加法(60分) 问题描述: 在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下: 9876543210 + 1234567890 = ? 让字符串num1="9876543210",字符串num2="1234567890",结果保存在字符串result = "11111111100"。 -9876543210 + (-1234567890) = ? 让字符串num1="-9876543210",字符串num2="-1234567890",结果保存在字符串result = "-11111111100"。 要求编程实现上述高精度的十进制加法。

华为机试试题汇总解析

1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50 #include main() { intnum[50]={0}; inti,n; printf("请输入整型数组的长度(1~50):"); scanf("%d",&n); printf("请输入整型数组的元素:"); for(i=0;inum[j]) min_num=num[j]; } intsum=min_num+max_num; printf("数组中最大与最小值之和:%d\n",sum); return0; } 2.求两个长长整型的数据的和并输出,例如输入1233333333333333。。。3111111111111111111111111.。。。,则输出。。。。

#include #include #include main() { char*num1,*num2; //两个长长整型数据 char*sum; // inttemp; int len_num1,len_num2; // 两个长长整型数据的长度 intlen_max,len_min; num1=(char*)malloc(sizeof(char)); num2=(char*)malloc(sizeof(char)); printf("输入两个长长整型数据:"); scanf("%s",num1); printf("输入两个长长整型数据:"); scanf("%s",num2); len_num1=strlen(num1); len_num2=strlen(num2); len_max=(len_num1>=len_num2)?len_num1:len_num2; len_min=(len_num1<=len_num2)?len_num1:len_num2; int len_max1=len_max; sum=(char*)malloc(sizeof(char)*len_max); memset(sum,0x00,len_max+1);//切忌初始化 for(;len_num1>0&&len_num2>0;len_num1--,len_num2--) { sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0')); } if(len_num1>0) { sum[len_max--]=num1[len_num1- 1 ]-'0'; len_num1--; } if(len_num2>0) {

2014华为上机题

样题-初级题:从考试成绩中划出及格线 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为60分 样题-中级题:亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。 有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。 注:电灯数和学生数一致。

样题-高级题:地铁换乘 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 8.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。 (其中最大值与最小值可能有多个) Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3

华为机试试题汇总

1 ?第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50 #i nclude mai n() { intn um[50]={0}; in ti, n; printf("请输入整型数组的长度(1~50):"); scan f("%d",&n); printf("请输入整型数组的元素:"); for(i=0;i nu m[j]) min_num=nu m[j]; } in tsum=min_nu m+max_ num; printf("数组中最大与最小值之和:%d\n",sum); return。; } 2. 求两个长长整型的数据的和并输出,例如输入123333333333333 3.OO

3111111111111111111111111。。O,则输出。OOO #i nclude #i ncludevstri ng.h> #i nclude mai n() { char* nu ml,* num2; //两个长长整型数据 char*sum; // in ttemp; int Ien_num1,len_num2; //两个长长整型数据的长度 in tle n_ max,le n_min; nu m1=(char*)malloc(sizeof(char)); nu m2=(char*)malloc(sizeof(char)); printf("输入两个长长整型数据:"); scan f("%s", nu m1); printf("输入两个长长整型数据:"); scan f("%s", nu m2); len_nu m仁strle n(nu m1); len_nu m2=strle n(nu m2); len_ max=(le n_nu m1>=le n_nu m2)?le n_nu m1:le n_nu m2; len_ mi n=(le n_nu m1<=le n_nu m2)?le n_nu m1:le n_nu m2; int len _max1=le n_max; sum=(char*)malloc(sizeof(char)*le n_max); memset(sum,OxOO,len_max+1);〃切忌初始化 for(;le n_nu m1> 0&&le n_nu m2>0;le n_nu m1--,le n_nu m2--) { sum[len_max--]=(( nu m1[len_num1-1]-'0')+( nu m2[len_num2-1]-'0')); } if(len_num1>0) { sum[le n_max--]=nu m1[le n_nu m1- 1 ]-'0'; len_nu m1--; } if(len_num2>0) {

华为公司治理结构含清晰组织结构图

股东会是公司最高权力机构,对公司增资、利润分配、选举董事/监事等重大事项作出决策。 董事会是公司战略和经营管理的决策机构,对公司的整体业务运作进行指导和监督,对公司在战略和运作过程中的重大事项进行决策。 监事会主要职责包括内外合规监督,检查公司财务和公司经营状况,对董事、高级管理人员执行职务的行为和董事会运作规范性进行监督。 公司实行董事会领导下的轮值CEO制度,轮值CEO在轮值期间作为公司经营管理以及危机管理的最高责任人,对公司生存发展负责。 自2000年起,华为聘用毕马威作为独立审计师。审计师负责审计年度财务报表,根据会计准则和审计程序,评估财务报表是否真实和公允,对财务报表发表审计意见。 公司设立基于客户、产品和区域三个纬度的组织架构,各组织共同为客户创造价值,对公司的财务绩效有效增长、市场竞争力提升和客户满意度负责。 ?运营商BG和企业BG是公司分别面向运营商客户和企业/行业客户的解决方案营销、销售和服务的管理和支撑组织,针对不同客户的业务特点和经营规律提供创新、差异化、领先的解决方案,并不断提升公司的行业竞争力和客户满意度;消费者BG是公司面向终端产品用户的端到端经营组织,对经营结果、风险、市场竞争力和客户满意度负责。

?产品与解决方案是公司面向运营商及企业/行业客户提供ICT融合解决方案的组织,负责产品的规划、开发交付和产品竞争力构建,创造更好的用户体验,支持商业成功。 ?区域组织是公司的区域经营中心,负责位于区域的各项资源、能力的建设和有效利用,并负责公司战略在所辖区域的落地。公司持续优化区域组织,加大、加快向一线组织授权,指挥权、现场决策权逐渐前移至代表处。区域组织在与客户建立更紧密的联系和伙伴关系、帮助客户实现商业成功的同时,进一步支撑公司健康、可持续的有效增长。 ?集团职能平台是聚焦业务的支撑、服务和监管的平台,向前方提供及时准确有效的服务,在充分向前方授权的同时,加强监管。

华为机试题及答案

华为机试题及答案 1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。 测试:输入:“abc def gh i d”输出:“abc,def,gh,i,d,” #include #include void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr) { int i=0,j=0; int flag=0; while(pInputStr[i]==' ') { i++; } for(;i

continue; } if(flag==1) { flag=0; pOutputStr[j++]=','; } pOutputStr[j++]=pInputStr[i]; } pOutputStr[j++]=','; pOutputStr[j]='\0'; } int main() { char test[40]; char re[40]; gets(test); DivideString(test, strlen(test), re); printf("%s",re); return 0; } 2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循

环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。 测试:输入:char*input="abbbcd" 输出:char*output="bcdcde" #include #include void convert(char *input,char* output) { int i; for(i=0;i

华为面试的上机题(原创)

2011年华为软件校园招聘编程测验 类别:软件C/C++语言 编程题(共3题,第一题20分,第二题30分,第三题50分,共100分) 注意: 1、请上机编写程序,按题目要求提交文件。[详见考试说明,点击进入考试说明] 2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开 3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设 输出。两者相同则得分,不同则不得分。 4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情 况 5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误 6、被要求实现的函数如果包含返回参数,该返回参数涉及的空间分配和释放均在函 数外完成,在被要求实现函数内部可以直接使用返回参数 7、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余 用例不被执行,无法得分 8、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数 的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目 1.评委打分(20分) ?问题描述: 在评委打分的比赛中,通常采取去掉一个最高分和最低分,再求平均分的做法, 主要是为了公平,公正和公开的原则,防止有人买通评委,有特别的高分出现, 另外,也可以防止因为评委个人原因,对选手有“低见”给特别低的分。去掉最高 分最低分能够求出较为准确的平均分。请编写程序实现上述计分过程 ?要求实现函数: int score_calc(int n, int score[]) 【输入】int n,评委人数n(n>=3) int score[],每个评委的打分(百分制) 【输出】无 【返回】选手最终得分(取整) 注: 取整和四舍五入不同,取整只保留数值的整数部分,小数部分丢弃。比如7.3和7.6,取整后都为7 ?示例 输入:int n = 5;int score[] = {75, 80, 75, 70, 80} 输出:无 返回:76

2014华为校园招聘笔试算法题汇总

华为2014笔试算法题汇总 1.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:“deefd”输出:“def” 输入:“afafafaf”输出:“af” 输入:“pppppppp”输出:“p” main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。 一定要保证编译运行不受影响 [cpp] view plaincopy ////////////////////////////////////////////////////////////////////////// #include #include

using namespace std; bool g_flag[26]; void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) { assert(pInputStr != NULL); int i = 0; if (pInputStr == NULL || lInputLen <= 1) { return; } const char *p = pInputStr; while(*p != '\0') { if (g_flag[(*p - 'a')]) { p++; }else{ pOutputStr[i++] = *p; g_flag[*p - 'a'] = 1; p++; } }

华为机试题 面试题

昨天下午机试三道题目: 1.字符去重,例如输入字符串:“aabbccdd”,输出字符串“abcd,要求,不改变字符的顺序。 2.求解类似于2+22+222+2222的和。 3.判断一个邮件地址是否有效。例如:huawei@https://www.doczj.com/doc/a57256855.html, 判断条件:只有一个@符号,最后四个字符是.com ;不含空格;字符只能是‘a-z’,‘A-Z’,‘1-9’,‘_’,‘.’,'@' 1.字符串首字母转换成大写 举例: 输入:this is a book 返回:This Is A Book 2.统计不同字符串的个数 举例: 输入:addfsdfasa 输出:4 3.统计数字出现的次数,最大次数的统计出来 举例: 输入:323324423343 输出:3,6 华为面向2013年招聘笔试题 笔试题目(机试,共两题) 题目一:子串分离 题目描述: 通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。 如果输入“abc def gh i d”,结果将是abc,def,gh,i,d, 要求实现函数: void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入输出 示例 输入:“abc def gh i d”

2014华为机试笔试题目

2014华为机试笔试题目 1.输入摸一个数,然后将其倒过来相加,如果和不是回文串,那么将和再采取同样的操作,在判断得到的是否为回文串,这样往返7次,如果其中有一次是回文就直接打出来,若都没有,那么输出0; 也很简单!用库函数更简单,itoa这个!整数转成字符,然后判断回文! 2.关于匹配的字符串的个数的最大值,即目标字符串与多个字符串比配,找出匹配最多的那个字符串。 其实代码很简单,我当时用2个数组,下标即为字符,值为出

现次数,这样比较即可; 可是我输入字符的代码写错了比如要输入Li si;到一个字符数组里面,我写成了 char a[200]; cin a;//这里错了,应该写为cin.getline(a,200);因为cin输入遇到空格就认为输入结束,所以只有li,没有si 3.输入一个十进制的数,与一个n整数,求输出这个十进制数的n进制的数! 分析:哎,真倒霉,可以用atoi函数啊 itoa函数

#include cstdlib #include cstdio int main() { int num = 10; char str[100]; itoa(num, str, 2);

printf( %s\n , str); return 0; } itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为10。10:十进制;2:二进制 于是想到了一个十进制转二进制的方法: #include cstdlib #include cstdio

int main() { int num = 10; char str[100]; int n = atoi(itoa(num, str, 2)); printf( %d\n ,n); return 0;

华为上机题目总结

试题一:输入字符串长度len1,字符串s1,字符串长度len2,字符串s2。从后向前比较,以最短字符串为标准,输出不同的元素的个数。 例如: 输入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5 输出:1 public class Test1 { public static void main(String[] args) { String str1 = "1,3,5"; String str2 = "2,1,6,5"; System.out.println(getDifferentNumber(str1, 3, str2, 4)); } public static int getDifferentNumber(String str1, int len1, String str2, int len2) { int count = 0; int len = 0; len = (len1

(完整版)华为试题答案

1)在计算机局域网中,常用通信设备有(abd ), A、集线器(HUB) B、交换机(Switch) C、调制解调器(Modem) D、路由器(Router) 2)线缆标准化工作主要由哪一个协会制定? (c ) A、OSI B、ITU-T C、EIA D、IEEE 3)802协议族是由下面的哪——个组织定义? (c ) A、OSI B、EIA C、IEEE D、ANSI )衡量网络性能的两个主要指标为(AC) A、带宽 B、可信度 C、延迟 D、距离 )局域网区别与其他网络主要体现在以下(ABCD)方面 A、网络所覆盖的物理范围 B、网络所使用的传输技术 C、网络的拓扑结构 D、带宽 )不会产生单点故障的是下列(ABC)拓扑结构。 A、总线型 B、环型 C、网状结构 D、星形 4)数据交换技术包括(abc ) A、电路交换(Circuit switching) B、报文交换(Message switching) C、分组交换(Packet switching) D、文件交换(File switching) 5)(b )拓扑结构会受到网络中信号反射的影响? A、网型 B、总线型 C、环型 D、星型 6)OSI参考模型按顺序有哪些?(c ) A、应用层、传输层、数据链路层、网络层、物理层 B、应用层、表示层、会话层、传输层、数据链路层、网络层、物理层 C、应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 D、应用层、表示层、传输层、网络层、数据链路层、物理层 7)在OSI七层模型中,网络层的功能有(b ) A、确保数据的传输正确无误 B、确定数据包如何转发与路由

华为上机题

华为实习上机题 C\C++ 2009-06-29 21:51:58 阅读157 评论0 字号:大中小订阅 input.txt文件中包含若干英语单词(由小写字母组成),读取全部单词,并将其按字典序输出到output.txt 文件中.重复的单词只允许输出一次.单词最大长度不超过63个字符. 1,程序编译后生成的可执行文件名称test.exe,命令行执行方式是test.exe input-file-name output-file-name,命令行的解析由程序框架处理,大家不要修改。 2,文件的读写由框架程序提供封装好的函数read_nextword()和write_word(),大家不需要去考虑读写文件的具体细节。注意仔细阅读在numlib.h里面两个函数的注释, 3,内存的申请、释放请使用封装好的函数pmalloc()和pfree(),大家不要直接使用系统的malloc()、free()和calloc()等,否则可能被判0分。注意仔细阅读在numlib.h里面两个函数的注释。 4,当你发现处理中出现任何异常或者错误时,请调用log_record()记录日志,参数是你自己定的一个字符串。但是大家千万不要调用exit()之类的函数直接结束程序运行,否则可能判0分。 5,main()函数已经编写完整,大家不用再修改。大家要做的就是实现data_process()函数。当然,你可以根据需要定制自己的数据结构、宏、其他处理函数等等。 l框架程序 include "numlib.h" /* 此函数由考试者填写,参数是输入、输出文件的指针 * 1、考试者不必处理文件指针的关闭,由主程序处理。 * 2、考试者不要直接调用exit()等退出程序 * 3、读文件请使用read_nextword(),写文件请使用write_word(),注意返回值 * 4、申请内存请调用pmalloc(),释放内存请调用pfree(),不要自己直接调用malloc/free * 5、当遇到任何异常时,请先调用log_record()记录异常,再作其他处理,不许调用EXIT() */ /* 考试者可以自行定义数据结构、变量和函数等,并实现以下data_process函数即可*/ typedef struct Node{ char a[64]; struct Node *next; }Node; void data_process(FILE *fpInput, FILE *fpOutput) { char word[64]; Node *head=NULL; Node *q=head; Node *t=NULL; Node *p; int i=0; while(SUCCESS_E==read_nextword(fpInput,word)) {

相关主题
文本预览
相关文档 最新文档