华为机试题目好好练习DOCWord文件下载.docx
《华为机试题目好好练习DOCWord文件下载.docx》由会员分享,可在线阅读,更多相关《华为机试题目好好练习DOCWord文件下载.docx(48页珍藏版)》请在冰豆网上搜索。
"
;
cout<
endl;
}
}
return0;
}
2.题目描述:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,
如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
测试数据有多组,每组输入第一行有一个整数N(N<
=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名年龄成绩
3
abc2099
bcd1997
bed2097
提示:
学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
string>
structStudent
stringname;
intage;
intscore;
};
boolcmp(Studentx,Studenty)
if(x.score!
=y.score)
returnx.score>
y.score;
else
returnx.name<
y.name;
intN,i;
Studentdata[1000];
N)
if(N>
0&
N<
=1000)
N;
{cin>
data[i].name;
data[i].age;
data[i].score;
}
sort(data,data+N,cmp);
for(i=0;
{cout<
data[i].name<
data[i].age<
data[i].score<
3.题目描述:
输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。
输入第一行包括1个整数N,1<
=N<
=1000,代表输入数据的个数。
接下来的一行有N个整数。
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
1342
123
如果数组中只有一个数,当第一行将其输出后,第二行请输出"
-1"
。
注意:
最后一个数字输出不能加空格!
!
intN,i,data[1000];
if(N>
for(i=0;
cin>
sort(data,data+N);
cout<
data[N-1]<
if(N==1)
else
N-2;
4.题目描述:
输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。
测试数据有多组,输入字符串。
对于每组输入,输出处理后的结果。
bacd
abcd
stringstr;
str)
sort(str.begin(),str.end());
cout<
str<
5./*输入字符串,输出字符串中的数字,数字用一行表示*/
boolflag=0;
intlen=str.size();
//注意表示string字符串的长度用str.size()
for(inti=0;
len;
if(str[i]>
='
0'
str[i]<
9'
)//一定注意这里是字符,加单引号
{
if(flag==0&
str[i]=='
)//要考虑第一个数字是否为0,如果是的话则跳过
continue;
flag=1;
cout<
str[i];
}
6./*输入字符串,删除字符串中的数字,将大写改小写,输出*/
intlen;
len=str.size();
if(str[i]>
)
continue;
A'
Z'
str[i]=str[i]-'
+'
a'
//注意大小写转换的方法
7./*输入一个字符串,输出起出现次数最多的数字,若有2个数字出现次数相同,则输出较小的一个*/
intdata[10]={0};
inti,num,max=0;
str.size();
i++)//将数字出现的频率存入对应的数组
{
num=str[i]-'
data[num]++;
10;
i++)//找出最大的一个频率
if(data[i]>
max)
max=data[i];
i++)//输出频率最高的数字
if(max==data[i])
{
break;
8./*统计字符串中出现频率最高的字符,并将其输出;
若有2个字符出现频率相同,则输出字典序小的一个*/
intfreq[256]={0};
num=(int)str[i];
freq[num]++;
255;
if(freq[i]>
max=freq[i];
if(freq[i]==max)
(char)(i)<
9./*输入一个数字,输出其各个位上的和,正整数,int范围内*/
inti,sum=0,num;
num=str[i]-'
sum+=num;
sum<
/*输入一个数字,输出其各个位上的和,正整数,int范围内*/
intans,sum=0;
ans)
while(ans!
=0)
{
sum+=ans%10;
ans/=10;
10./*输入一个数字,逆序输出其各个位,换行后输出各个位上的积,正整数,int范围内*/
inti,sum=1,num;
for(i=str.size()-1;
i>
=0;
i--)
str[i]-'
sum*=(str[i]-'
);
11./*输入一个字符串,统计其出现频率最高的字符,并输出。
若存在两个字符出现频率相同,则输出字典序较小的那一个*/
intfre[256]={0};
str;
num=(int)str[i];
fre[num]++;
256;
if(fre[i]>
max=fre[i];
if(fre[i]==max)
char(i)<
break;
12./*输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。
输入描述
10个正整数,保证都在int范围内,用空格隔开
输出描述
10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格
输入样例
113245987106
输出样例
102113456789
*/
intcal(intn)
intsum=0,m;
while(n!
m=n%10;
sum+=m;
n/=10;
returnsum;
intcmp(intx,inty)//注意cmp函数的书写?
?
有问题!
2和11的输出顺序
if(cal(x)!
=cal(y))
returncal(x)<
cal(y);
returnx<
y;
inta[10],i;
cin>
a[i];
sort(a,a+10,cmp);
if(i!
=9)
//注意此处的书写,最后一个数字不加空格,则判断i==9时不输出空格。
写为当i!
=9时都输出空格。
13./*题目描述
你有一个容量为100的箩筐,给你30个物品,每个物品的体积已知问:
最多能装多少个物品进箩筐
输入描述
一行30个正整数,用空格隔开,表示每个物品的体积
输出描述
一个数字,为最多能装下的物品数
输入样例(此处用3个物品作为样例,实际读入为30个)
559100
输出样例
2
*/
#defineNUM3
inta[NUM],i,sum=0;
NUM;
sort(a,a+NUM);
if(sum+a[i]>
100)
sum+=a[i];
14.//输入一个字符串,用指针求出字符串的长度
chara[20],*p;
intcount=0;
gets(a);
p=a;
while(*p++)
count++;
count<
15./*打印输出乘法口诀法
比如输入n
n=5;
打印输出
1
2,4
3,6,9
4,8,12,16
5,10,15,20,25*/
intn;
for(inti=1;
=n;
for(intj=1;
j<
=i;
j++)
i*j;
if(j<
i)
"
if(j==i)
16.
17./*
通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,
若字符串中出现多个相同的字符,将非首次出现的字符过滤掉,然后按字母表顺序输出。
比如字符串
“abfcacde”输出结果为“abcdef”。
inti,len;
len=str.size();
sort(str.begin(),str.end());
str[0];
for(i=1;
len-1;
if(str[i]==str[i+1])
continue;
else
str[i+1];
18./*天数问题
MM-YYYY,MM为月份,YYYY为年份,例如:
08-2014
指定年份和月份的天数。
例如,08-2014,对应输出为31。
intdays=0,month,year;
month=(str[0]-'
)*10+(str[1]-'
year=(str[3]-'
)*1000+(str[4]-'
)*100+(str[5]-'
)*10+(str[6]-'
)*1;
switch(month)
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case4:
case6:
case9:
case11:
days=30;
case2:
if((year%4==0&
year%100!
=0)||year%400==0)
days=29;
else
days=28;
days<
return0;
19./*第一题(60分):
按要求分解字符串,输入两个数M,N;
M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
例如:
输入2,8,“abc”,“123456789”
则输出为“abc00000”,“12345678“,”90000000”*/
#include<
cstdio>
voidsolve(char*str,intn,intlen)
{
inti,j,k,quotient,remainder;
quotient=len/n;
//原字符串被分解的个数,n代表输出的每串字符串的位数
remainder=len-n*quotient;
//剩余的字符串的个数
for(i=0;
i<
len;
i+=n)
{
if(len-i<
n)
k=n-len+i;
for(j=i;
j<
++j)
printf("
%c"
str[j]);
for(j=0;
k;
putchar('
}
i+n;
'
\n"
}
intmain(void)
inti,m,n,len;
charstr[1000];
while(scanf("
%d%d"
&
m,&
n)!
=EOF)
m;
++i)
scanf("
%s"
str);
len=strlen(str);
solve(str,n,len);
20./*拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。
转换关系如下:
描述:
拼音yiersansiwuliuqibajiu
阿拉伯数字123456789
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:
无限制
内存限制:
无限制
一行字符串,长度小于1000
一行字符(数字)串
yiersansi
1234*/
str)!
=EOF)
len=strlen(str);
inti;
switch(str[i])
case'
y'
:
'
1'
i+=2;