文档库 最新最全的文档下载
当前位置:文档库 › 华为上机题整理大全及答案解析

华为上机题整理大全及答案解析

华为上机题整理大全及答案解析
华为上机题整理大全及答案解析

1、数组中最大数与最小数之和 (4)

2、两个长整型的和 (5)

3、删除串中重复出现的字符 (6)

4、将串中重复出现的字符进行压缩 (8)

5、操作数1 运算符操作数2 (9)

6、约瑟夫环问题 (11)

7、去掉数字串中的最大数和最小数 (13)

8、身高差值最小的两个身高 (14)

9、删除子串 (15)

10. 实现高精度的十进制加法 (17)

11、10个学生及格线 (23)

12、亮着的电灯数 (24)

14、字符串按照特殊规则转换 (25)

15、字符串中查找单词 (27)

16、数组中不同的一个数 (28)

17、数组中不同的两个数 (29)

18、链表以k翻转 (31)

19、链表相邻元素翻转 (34)

20、字符串中小括号中括号匹配 (36)

21、一行数字中找子数 (38)

22、字符串M化成以N为单位的段 (40)

23将电话号码 one two 。。。nine zero (41)

24.将整数倒序输出 (44)

25、括号匹配 (46)

26约瑟夫问题 (47)

27.统计数字出现的次数,最大次数的统计出来 (48)

28. .字符串首字母转换成大写 (50)

29. 子串分离 (50)

29. 子串分离

题目描述:

通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子

串存储。

如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,

要求实现函数:

void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串

lInputLen:输入字符串长度

【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

方法一:

void DivideString(char*pInputStr,long iInputLen,char*pOutputStr)

{

int cnt;

while(*pInputStr!='\0')//用空来判断串结束,并没有用到串长

{

if(*pInputStr!=' ')

{

cnt=0;

*pOutputStr++=*pInputStr++;

}

else

{

cnt++;

if(cnt==1)//用cnt来实现两个单词之间有多个空格时也只替换一个空格为, *pOutputStr++=',';

pInputStr++;

}

}

*pOutputStr++=',';

*pOutputStr='\0';

}

方法二:void DivideString(char*pInputStr,long iInputLen,char*pOutputStr)

{

int i,cnt=0,k=0;

For(i=0;pInputStr[i]!=’’;i++);//不要忘了把串首的空格给剔除

for(i

{

if(pInputStr[i]!=' ')

{

cnt=0;

pOutputStr[k++]=pInputStr[i];//k指示输出指针,与i的增加并非同步

}

else

{

cnt++;

if(cnt==1)

pOutputStr[k++]=',';

}

}

pOutputStr[k++]=',';

pOutputStr[k]='\0';

}

void main()

{

char *a="I am a good boy";

char*b=(char*)malloc(strlen(a)+1);//应该加2吧,末尾要存放一个,一个串结束标识符DivideString(a,strlen(a),b);

printf("%s\n",b);

}

27.统计数字出现的次数,最大次数的统计出来

输入:323324423343

输出:3,6

#include

#include

int main()

{

char *pInputStr="2343545466666789";

int hash[10]={0};

int max,max_n,i;

//统计次数

for(i=0;i

hash[pInputStr[i]-'0']++;//串转化为数字

//寻找最大的次数

max=hash[0];

for(i=0;i<10;i++)

{

if(hash[i]!=0)//有些数字的出现次数可能为0,使用此句可以避免下面的比较

{

if(hash[i]>max)//等价语句:max=max>hash[i]?max,hah[i];

{

max=hash[i];

max_n=i;

}

printf("the number %d 出现%d次\n",i,hash[i]);

}

}

printf("数字%d出现次数最多:%d\n",max_n,max);

return 0;

}

28. .字符串首字母转换成大写

举例:

输入:this is a book

返回:This Is A Book

#include

int main()

{

char a[]="i am is a boy";

int i;

//int n=strlen(a);

char b[256]={0};

for(i=0;i

{

if(a[i]==' ')

a[i+1]=a[i+1]-32;

b[i]=a[i];

}

b[0]=a[0]-32;

printf("原串为:%s\n",a);

printf("新串为:%s\n",b);

return 0;

}

1、数组中最大数与最小数之和

1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50

#include

main()

{

int num[50]={0};

int i,n;

printf("请输入整型数组的长度(1~50):");

scanf("%d",&n);

printf("请输入整型数组的元素:");

for (i=0;i

{

scanf("%d",&num[i]);

}

int min_num=num[0];

int max_num=num[0];

for(int j=0;j

{

if(max_num

max_num=num[j];

else if(min_num>num[j])

min_num=num[j];

}

int sum=min_num+max_num;

printf("数组中最大与最小值之和:%d\n",sum);

return 0;

}

2、两个长整型的和

2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。。。3111111111111111111111111.。。。,则输出。。。。

#include

#include

#include

int main()

{

char *num1,*num2,*result;

int *sum;

int i,j,max1;

int num1_len,num2_len,max;

num1=(char*)malloc(sizeof(char)*100);

num2=(char*)malloc(sizeof(char)*100);

printf("请输入两个整数:");

scanf("%s",num1);

printf("请输入两个整数:");

scanf("%s",num2);

num1_len=strlen(num1);

num2_len=strlen(num2);

max=num1_len>num2_len?num1_len:num2_len;

max1=max;//最大长度值,先保存后续用

sum=(int*)malloc(sizeof(int)*(max+1));

memset(sum,0,sizeof(int)*(max+1));//注意清零,没有这句可能会产生乱码,多一位存进位位

/*for(i=0;i

{

sum[i+1]=num1[i]-'0'+num2[i]-'0';

}

if(i>=num1_len)

while(i

{

sum[i+1]=num2[i]-'0';

i++;

}

if(i>=num2_len)

while(i

{

sum[i+1]=num1[i]-'0';

i++;

}*/

for(;num1_len>0&&num2_len>0;num1_len--,num2_len--)//从尾部相加才是正确的sum[max--]=num1[num1_len-1]-'0'+num2[num2_len-1]-'0';

while(num1_len>0)//第一个数未完,而第二个数已经加完

{

sum[max--]=num1[num1_len-1]-'0';

num1_len--;

}

while(num2_len>0)//第二个数未完,第一个数已经加完

{

sum[max--]=num2[num2_len-1]-'0';

num2_len--;

}

for(j=max1;j>=1;j--)

{

if(sum[j]>=10)//可以把这个if去掉,加上仅仅是为了减少计算的次数

{

sum[j-1]+=sum[j]/10;

sum[j]=sum[j]%10;

}

}

result=(char*)malloc(sizeof(char)*(max1+2));//多一位存串结束标识符

for(i=0;i

result[i]=sum[i]+'0';

result[max1+1]='\0';

if(result[0]=='0')

printf("%s\n",result+1);

else

printf("%s\n",result);

system("pause");

return 0;

//getchar();

}

3、删除串中重复出现的字符

3.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】pInputStr:输入字符串

lInputLen:输入字符串长度

【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

#include

#include

#include

/*void stringFilter(const char*pInputStr,long iInputLen,char *pOutputStr)

{

int hash[26]={0};

int i,j=0;

for(i=0;i

{

if(0==hash[pInputStr[i]-'a'])

{

pOutputStr[j++]=pInputStr[i];

hash[pInputStr[i]-'a']=1;

}

}

pOutputStr[j]='\0';

}*/

void stringFilter(const char*pInputStr,long iInputLen,char*pOutputStr)

{

int hash[26]={0};

while(*pInputStr)

{

if(0==hash[*pInputStr-'a'])

{

*pOutputStr++=*pInputStr;

hash[*pInputStr-'a']=1;

}

pInputStr++;

}

*pOutputStr='\0';

}

void main()

{

char *pInputStr="abddfdgffgfgfhgh";

char b[50];

stringFilter(pInputStr,strlen(pInputStr),b);

printf("原来的字符串为:%s\n",pInputStr);

printf("新生成的字符串为:%s\n",b);

}

4、将串中重复出现的字符进行压缩//见文档尾

4.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

要求实现函数:

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】pInputStr:输入字符串

lInputLen:输入字符串长度

【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

#include

#include

#include

void stringZip(const char *pInputStr,long iInputLen,char *pOutputStr)

{

int i,j,num,k=0;

char buffer[25];

for(i=0;i

{

num=0;

for(j=i+1;j

if(pInputStr[i]==pInputStr[j])

num++;

else

break;

if(0!=num)

{

memset(buffer,0,sizeof(buffer));

itoa(num+1,buffer,10);

strcpy(pOutputStr+k,buffer);

k=k+strlen(buffer);

}

pOutputStr[k++]=pInputStr[i];

i=i+num+1;

}

pOutputStr[k]='\0';

}

void main()

{

char pInputStr[]="abffgggllll5555agafgfg888888899999111";

char *pOutputStr;

pOutputStr=(char*)malloc(sizeof(char)*100);

stringZip(pInputStr,strlen(pInputStr),pOutputStr);

printf("%s\n",pOutputStr);

}

5、操作数1 运算符操作数2

5.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。

补充说明:

1. 操作数为正整数,不需要考虑计算结果溢出的情况。

2. 若输入算式格式错误,输出结果为“0”。

要求实现函数:

void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);

【输入】pInputStr:输入字符串

lInputLen:输入字符串长度

【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

#include

#include

#include

void arithmetic(const char*pInputStr,long iInputLen,char* pOutputStr)

{

int i,num1=0,num_space=0,j,num2=0,result;//先判断空格数是否合法(第一个字符是否合法);再判断操作符是否合法

char buffer[10];

//bool add,sub;

int add,sub;

add=0;

sub=0;

for(i=0;i

if(pInputStr[i]==' ')

num_space++;

if(2!=num_space)

{

pOutputStr[0]='0';

pOutputStr[1]='\0';

return;

}

for(i=0;pInputStr[i]!=' ';i++)//i在第一个空格处停{

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

num1=num1*10+pInputStr[i]-'0';

else

{

pOutputStr[0]='0';

pOutputStr[1]='\0';

return;

}

}

for(j=i+1;pInputStr[j]!=' ';j++);//j在第二个空格处停if(1!=j-i-1)

{

pOutputStr[0]='0';

pOutputStr[1]='\0';

return ;

}

else

{

if('+'!=pInputStr[i+1]&&'-'!=pInputStr[i+1])

{

pOutputStr[0]='0';

pOutputStr[1]='\0';

return;

}

else

{

if('+'==pInputStr[i+1])

add=1;

if('-'==pInputStr[i+1])

sub=1;

for(i=j+1;i

{

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

num2=num2*10+pInputStr[i]-'0';

else

{

pOutputStr[0]='0';

pOutputStr[1]='\0';

return;

}

}

if(add)

result=num1+num2;

if(sub)

result=num1-num2;

memset(buffer,0,sizeof(buffer));

itoa(result,buffer,10);

strcpy(pOutputStr,buffer);

}

}

}

void main()

{

char* pInputStr="3 - 5555";

char pOutputStr[20];

arithmetic(pInputStr,strlen(pInputStr),pOutputStr);

printf("%s\n",pOutputStr);

}

6、约瑟夫环问题

6.一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人

(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。)typedef struct point

{

int NO;

struct point *next;

}Lnode,*LinkList;

int n,m;

LinkList create_LinkList()

{

LinkList head,tail,new1;

int i;

printf("请输入总结点个数");

scanf("%d",&n);

printf("请输入出列序号");

scanf("%d",&m);

head=NULL;

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

{

new1=(LinkList)malloc(sizeof(Lnode));

new1->NO=i;

if(head==NULL)

{

head=new1;

tail=new1;

}

else

{

tail->next=new1;

tail=new1;

}

}

tail->next=head;

return head;

}

void search_LinkList(LinkList L)

{

LinkList pre,p;

int num=0,count=1;

p=L;

while(num

{

do

{

count++;

pre=p;

p=p->next;

}while(count

printf("%d ",p->NO);

pre->next=p->next;

free(p);

p=pre->next;

count=1;

num++;

}

}

void main()

{

LinkList head;

head=create_LinkList();

search_LinkList(head);

//getchar();

system("pause");

}

7、去掉数字串中的最大数和最小数

7..输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数。如输入“3,3,4,5,6,7,7”

#include

#include

int main()

{

char str[100];

int array[100];

int i,count=0,min,max;

int result;

printf("请输入一串字符");

scanf("%s",str);

for(i=0;i

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

array[count++]=str[i]-'0';//剔除逗号,将串变为整数存放于整型数组min=max=array[0];

for(i=0;i

{

if(max

max=array[i];

else if(min>array[i])//其实用if也可以,但用else可以减少计算次数

min=array[i];

}

result=count;//保存总的有效个数

for(i=0;i

{

if(array[i]==max)

result--;

else if(array[i]==min)//必须用else,而不能用if,当最大值最小值相等时用if会变为

负值,而不是0,重复减

result--;

}

printf("%d\n",result);

system("pause");

return 0;

}

8、身高差值最小的两个身高

8.输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出;

如输入170 181 173 186 190 输出170 173

#include

#include

#define N 5

void main()

{

int height[N];

int i,j,temp,H1,H2,dmin;

printf("请输入一组身高在170到190之间的身高:");

for(i=0;i

scanf("%d",&height[i]);

for(i=0;i

for(j=0;j

if(height[j]>height[j+1])

{

temp=height[j];

height[j]=height[j+1];

height[j+1]=temp;

}

H1=height[0];

H2=height[1];

dmin=H2-H1;//找最小值

for(i=2;i

if(height[i]-height[i-1]<=dmin)//不能少等号

{

dmin=height[i]-height[i-1];

H1=height[i-1];

H2=height[i];

}

printf("差值最小的两个数为%d,%d\n",H1,H2);

printf("其最小值为%d\n",dmin);

}

9、删除子串

9.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include

#include

#include

#include

int delete_sub_str(const char* str,char *sub_str,char *result)

{

char *temp;

int len=strlen(sub_str);

int count=0;

assert(str!=NULL&&sub_str!=NULL);

temp=(char*)malloc(sizeof(char)*(len+1));//多开辟一个空间用于存结束标识符memset(temp,0,len+1);

while(*str)

{

memcpy(temp,str,len);

if(strcmp(temp,sub_str)==0)

{

count++;

str=str+len;

//memset(temp,0,len+1);这句可要可不要

}

else

{

*result=*str;

result++;

str++;

//memset(temp,0,len+1);

}

}

*result=’\0’;//传结束标志

free(temp);

return count;

}

void main()

{

char *str="abc123def123ghi123jkl123m123n";

char s[100]={0};

int n;

n=delete_sub_str(str,"123",s);

printf("总共有%d个子串\n",n);

printf("串输出为:%s\n",s);

}

一些容易使用错误的例子:

/*void main()

{

char a[20];

int b[20];

int c[20]={1,3,4,5};

char d[20]="abcdef";

char*s="abcdef";

printf("%d\n",sizeof(char)*20);//输出20*1;

printf("%d\n",sizeof(a));//输出20

printf("%d\n",sizeof(int)*20);//输出20*4=80;

printf("%d\n",sizeof(b));//输出80

printf("%d\n",strlen(c));//错误:strlen不用来判断整型数组实际存量大小,此句是没有意义的

printf("%d\n",strlen(d));//strlen一般用来判定字符串的实际大小,如字符数组所存的串为6

printf("%d\n",strlen(s));//字符指针所存的大小也为6

printf("%d\n",sizeof(s));//4

}*/

/*void main()

{

char s[]="abcdef";//正确,但memset不允许进行char *s="abcdef",memset(s,'G',5);这种赋初值的方式,也就是说仅仅定义一个指针变量是不能对其用memset赋初值,即使这个指针变量已经指向了一个字符串。定义

char *a="abcdef";

memset(s,'G',5);

printf("%s",s);

//a[1]='a';

printf("%c",a[1]);

}*/

/*void copy_string(char *from,char *to)

{

int i=0;

while(from[i]!='\0')

{

to[i]=from[i];

i++;

}

to[i]='\0';

}

void main()

{

char *a="123456789";

char *b="abcdef";

copy_string(b,a);//错误

printf("%s\n",a);

printf("%s\n",b);

// a=a+1;

// printf("%s",a);

}*/

10. 实现高精度的十进制加法

10. 要求编程实现上述高精度的十进制加法。要求实现函数:

void add (const char *num1, const char *num2, char *result)

【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-' num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-'

【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。#include

#include

int isLegalNum(const char *num)

{

if(num==NULL)

return 0;

if(*num=='-')

num++;

while(*num)

{

if(*num<'0'||*num>'9')

return 0;

num++;

}

return 1;

}

void reverse_str(char *result)

{

int i,temp;

int len=strlen(result);

for(i=0;i

{

temp=result[i];

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

result[len-1-i]=temp;

}

}

void add(const char *num1,const char *num2,char *result)

{

int len;

int temp;

int i,count=0;//进位位

const char *num1_p;

const char *num2_p;

int num1_len,num2_len;

char *result_p=result;//保留头部

if(!(isLegalNum(num1)&&isLegalNum(num2)))

strcpy(result,"输入非法");

num1_len=strlen(num1);

num2_len=strlen(num2);

num1_p=num1+num1_len-1;

num2_p=num2+num2_len-1;

if(*num1=='-'&&*num2=='-'||*num1!='-'&&*num2!='-')//两数同为负或同为正{

if(*num1=='-'&&*num2=='-')//同为负数

{

num1_len--;

num2_len--;

for(i=0;i

{

*result=(*num1_p-'0'+*num2_p-'0'+count)%10+'0';

result++;

count=(*num1_p-'0'+*num2_p-'0'+count)/10;

num1_p--;

num2_p--;

}

if(num1_len>num2_len)//第二个数先结束

{

for(i=0;i

{

*result++=(*num1_p-'0'+count)%10+'0';

count=(*num1_p-'0'+count)/10;

num1_p--;

}

}

if(num1_len

{

for(i=0;i

{

*result++=(*num2_p-'0'+count)%10+'0';

count=(*num2_p-'0'+count)/10;

num2_p--;

}

}

if(count==1)//进位位

*result++='1';

*result++='-';

*result='\0';

//reverse_str(result);错误,因为此时result并非指向头,发生变化,所以用一个result_p保留头部

reverse_str(result_p);

}

else if(*num1!='-'&&*num2!='-')

{

for(i=0;i

{

*result++=(*num1_p-'0'+*num2_p-'0'+count)%10+'0';//不可用(*num1_p---'0'+*num2_p---'0'+count)%10+'0,因为后文还要用到num1_p

count=(*num1_p-'0'+*num2_p-'0'+count)/10;

num1_p--;

num2_p--;

}

if(num1_len

{

for(i=0;i

{

*result++=(*num2_p-'0'+count)%10+'0';

count=(*num2_p-'0'+count)/10;

num2_p--;

}

}

else if(num1_len>num2_len)//可以用if,也可以用else,看看区别所在

{

for(i=0;i

{

*result++=(*num1_p-'0'+count)%10+'0';

count=(*num1_p-'0'+count)/10;

num1_p--;

}

}

if(count==1)

*result++='1';

*result='\0';

reverse_str(result_p);

}

}

else

{

temp=1;//默认负数,为正数时,temp为2

if(*num1=='-')

{

num1_len--;//有效数字长度减一位

num1++;//首地址指向下一位实际数字的起始地址

}

else if(*num2=='-')

{

temp=2;

num2_len--;

num2++;

}/*******两数相减的划分1、数1的绝对值大于数2;2、数2的绝对值小于数1;

3、数1的绝对值等于数2

if(num1_len>num2_len||(num1_len==num2_len)&&strcmp(num1,num2)>0)//数一的绝对值大于数二的绝对值

{

for(i=0;i

{

if(*num1_p-count>=*num2_p)//没有借位位

{

*result++=*num1_p-*num2_p-count+'0';//不需要求余运算,因为两个位相减不可能出现大于等于10的数

count=0;

num1_p--;

num2_p--;

}

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

华为校园招聘电子科大上机题目 一.题目描述(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

华为机试试题汇总解析

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) {

华为成都上机笔试题

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"。 要求编程实现上述高精度的十进制加法。

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

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

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

华为机试题及答案

华为机试题及答案 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

华为上机题目总结

试题一:输入字符串长度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)) {

2012华为校园招聘上机笔试题+机试+自己做出来的

1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有 array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。 函数原型为int compare_array( int len1, int array1[], int len2, int array2[] ); 其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。 以下是上题的函数完整实现: //diff_num.cpp #include int compare_array(int len1,int array1[],int len2,int array2[]) { int i,t,small,num=0; //把两数组倒置 for(i=0;i

//输出倒置后的两数组 /* for(i=0;ilen2) small=len2; else small=len1; num=small; for(i=0;i

2014华为上机题

目录 样题-初级题:从考试成绩中划出及格线 (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语句括号是否合法 (9) 9.1.PM (10) 9.1.PM (11) 9.1.PM (11)

样题-初级题:从考试成绩中划出及格线 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

华为电子材料上机考试笔试题目2020

单选题 (2分/题,合计40题) 1.不易与胶粘剂形成化学键粘结的是 A.PTFE B.PC C.PA D.PBT 2.金属冷却结晶时 A.理论结晶温度大于实际结晶温度 B.理论结晶温度小于实际结晶温度 C.理论结晶温度和实际结晶温度没关系 3.逆扩散现象 A.二次结晶 B.晶界杂质聚集 C.布朗运动 4.以下非纳米材料特有的性质是:D A.量子隧穿效应 B.表面效应 C.小尺寸效应 D.柯肯达尔效应 E.量子限域效应 5.Fe焊缝晶体形态主要是柱状晶和等轴晶:A A.正确 B.错误 6.固体表面能越大,液体越容易润湿:B A.正确 B.错误 7.以下属于物理键的是:B A.氢键 B.范德华力 C.离子键 D.共价键 8.交变荷载作用下,抵抗破坏能力的概念 A.疲劳强度

B.屈服强度 C.硬度 9.陶瓷材料晶体结构分析的手段 A.XRD B. 10.以下不属于位错的是 A.孪晶 B.多晶 C.空位 D. 11.大角度晶界定义 A.> 5~10° B.> 10~15° C.> 20~30° D.> 30~40° 12.为什么没有纯的二氧化钛陶瓷 难烧结 13.使用DSC、TMA、DMA测试材料的Tg点相差不超过2度 正确 or 错误 14.相图表示()下材料的相状态与温度、成分之间的关系 A.常压 B.平衡 C. 15.范特荷夫规则,纯固相反应,其过程是 A.放热反应 B.吸热反应 C.等温 16.沉淀的生成、溶解和转化的条件是什么 17. 多选题 (4分/题,合计5题) 1.请问润湿角满足什么条件,被视作疏水:(CDE)

A. > 30° B. > 60° C. > 90° D. > 120° E. > 150° 2.材料的磁性按照磁化程度分类:(ABCDE) A.顺磁性 B.抗磁性 C.铁磁性 D.亚铁磁性 E.反磁性 3.材料结晶的必要条件:(ABCD) A.过冷; B.结构起伏; C.能量起伏; D.成分起伏(合金) 4.细化材料铸态晶粒的措施:(ABC) A.提高过冷度 B.变质处理 C.振动与搅拌 D.提高温度

华为上机试题

华为上机试题 1、将大写字母转换成其对应小写字母后的第五个字母,大于z的从头开始数。 2、将一个十进制数(byte类型)转化二进制数,将二进制数前后颠倒,再算出颠倒后其对应的十进制数。(见Test2) 3、选秀节目打分,分为专家评委和大众评委,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) 4、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。 例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3} 函数接口void sort(int input[], int n, int output[])

华为机考试题+答案

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 int cal_score(int score[], int judge_type[], int n) { int i =0; int sum1=0, sum2=0; int count1=0,count2=0; int zhongfen=0; for(i =0; i

zhongfen = sum1; } else{ zhongfen = int ((sum1/count1)*0.6 +(sum2/count2)*0.4); } return zhongfen; } int main() { int score[]={1,1,1,1,1,1}; int judge_type[] = {2,2,2,1,2,2}; printf("%d", cal_score(score, judge_type, 6) ); } 2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。 例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3} 函数接口void sort(int input[[, int n, int output[]) #include void sort(int input[], int n, int output[]) { int i,j; int temp =0; for(i =0; iinput[j+1]) {

华为上机试题

华为上机试题 华为上机试题汇总 地区一: 1.编写函数stringdeletestring(stringstr,stringsub_str)从str中查找匹配的字符串sub_str,采用最左匹配,且输出形式为 str+"_"+匹配的次数 题目一的意思应该是求解字符串str中子字符串sub_str的个数,同时输出形式采用原字符串+"_"匹配次数 相信大家第一反应应该是采用kmp,那么下面给出常规优化kmp 程序如下(采用字符串数组形式): #include usingnamespacestd; intnext[100]; voidgetnext(charb[]) { inti=1,j=0;//ij next[1]=0; while(i<=strlen(b)) { if(j==0||b[i-1]==b[j-1]) {

i++; j++; next[i]=j; } elsej=next[j];// } } intkmp(chara[],charb[]) { inti=1,j=1;//ij while(i<=strlen(a)&&j<=strlen(b)) { if(j==0||a[i-1]==b[j-1]) { i++; j++; } elsej=next[j]; } if(j>strlen(b)) returni-strlen(b); elsereturn0; }

2.高精度数相加,stringaddBigInt(stringnum1,stringnum2)需要考虑正负数相加 这道题是高精度计算中的最最简单的一题: 目的是模拟人手工运算的过程,进而进行结果的现实; 参考代码(编译环境:VisualStudio6): 地区二: 第一题【20分】:鉴定回文数组 给定一个数组判断是否是回文,这题没什么好说明,直接看代码: 1#include 2usingnamespacestd; 3 4boolisHuiWen(strings) 5{ 6intlength_s=s.length(); 7inti=0; 8for(i=0;i<(length_s>>1);i++) 9{ 10if(s.at(i)!=s.at(length_s-1-i)) 11returnfalse; 12} 13returntrue; 14} 15

华为上机题库整理

华为上机题库整理 以前上机考试编程工具为C/C++:VC 6.0;Java:eclipse,这次改成C/C++: VS2005(或VC6.0) Java:JDK1.7。由于本人以前学C语言花了一些功夫,相对Java用得上手些,备考时用的是C++;临考前一周接到通知,说是要用VS2005,于是下个软件再加上熟悉一下花了半天时间,手忙脚乱了一阵(建议最好用VS,毕竟有的程序在VC上能调通,在VS上可能运行不通过);2、以往的形式是给你个函数模块,函数名已写好,你只要往里面填代码就行了(华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数)例如: 1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。函数原型为int compare_array( int len1, int array1[], int len2, int array2[] );其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。这次是随你发挥,可以写子函数,也可以只写个main 函数(当然main函数是必不可少的)。先在编译环境(即VS2005或JDK1.7)上运行,调通后再复制到考试系统中,检查无误后,点击提交(不过每道题最多只能传五次);.3、以往满分是100分,第一题20分,第二题30分,第三题50分,且前两题为必做题,最后一题作为附加题;现在是满分320(有点像英语四六级改革一样,100分改成710分),第一题60分,第二题100分,第三题160分,且不分什么必做题、附加题,建议拿到题目后最好把题目都浏览一遍,不一定按顺序做,尽会做的先做; 有几点需要特别注意: 1、一定要按标准输入、输出来编程,且按照考试系统中规定的格式,否则即使从头到尾写的都对,系统将显示格式错误,无法得分; 2、最好多试几组测试条例,否则得不全分(本人已经犯过此类失误,希望后人不要重蹈覆辙); 3、不要写任何程序提示语句(包括自己人为添加的换行命令),否则该题自动判 0分; 此外,考试时有不清楚的就问在场的工作人员,不要一个人憋在那里不吭声,浪费的是自己宝贵的时间;个人觉得华为的员工还是挺热心的,我问了不少问题,他们都跟我详细解答的,在此感谢他们的热忱相助。 1、删除子串 删除子串只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。 自己编的: #include #include #include int del_sub_str ( char *str, char *sub_str,char *result );

华为2012校园招聘上机试题及答案

2011年华为软件校园招聘编程测验 1、请上机编写程序,按题目要求提交文件。[详见考试说明,点击进入考试说明] 3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。两者相同则得分,不同则不得分。 4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况 5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误 6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分 7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目 1,判断电话号码是否合法: //要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符 int fun(char num[]) { char *p=num; int n=strlen(num); if(n==13){ if(*p=='8'&&*(p+1)=='6') while(*p!='\0'){ if(*p>='0'&&*p<='9') p++; else return 2; if(*p=='\0') return 0; } else return 3; } else return 1; } int main() { char num[]="87139a3887671"; int k=fun(num); cout<

相关文档