大师兄教你如何过华为机试Word格式文档下载.docx
《大师兄教你如何过华为机试Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大师兄教你如何过华为机试Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
1:
机试常用变量类型
C\C++常用的变量类型有很多种,想通过机试,掌握好其中的几种就可以,他们分别是int,double,string,char[]
int类型是最常用的整数类型,对于输入类型是整形的变量,使用int来进行定义和读入。
还有一种更大的整形变量是longlong,在机试中一般不会涉及到考察,如果考虑到运算的过程中有可能超过int的大小,再考虑使用longlong,int最大可以到达2^31级别,longlong最大可以到达2^63。
PS:
有时机试读入多个整数的时候会是这样的形式
5,10
中间有一个逗号,在这种情况下,其实读入也是很简单的,可以这么写:
scanf(“%d%c%d”,&
a,&
b,&
c);
或者是:
scanf(“%d”,&
a);
getchar();
有的机试题会说:
两个整数之间有若干个空格符或tab字符。
在这种情况下,读入的方式还是使用scanf(“%d%d”,&
b)这样,scanf函数或者cin函数都可以很好的吃掉除了数字字符以外的字符。
double类型是最常用的浮点数类型,当运算涉及到小数运算的时候,需要使用double来定义。
其中,特别需要注意的一点是,如果使用了如下语句:
doublex=a/b;
在这里,a和b是int,那么x的值将是a和b整除后的结果,而不是想要的结果,想要得到期望的结果,须改成
doublex=(a+0.0)/b;
在这里,将a加上一个浮点数,程序会在后台将它强制转换成一个double类型的数字,此时再除一个整数,就没有问题了
string类型是遇到字符串类问题应该首选的变量,区别于字符数组char[],string类型是直接将字符数组封装了进去,定义strings相当于定义了一个大小特别长的字符数组。
使用string的好处是,避免了使用char数组时定义数组长度过小导致越界,同时更加直观的将字符串看做了一个对象。
如果要定义一个string变量,首先得包含string的头文件以及使用C++中的标准命名空间,标准命名空间这个东西,只要记得写上就行,没有任何影响。
#include<
iostream>
//这一句是c++的头文件,c语言代码一样可以把它包含进来,只要将程序后缀名改成.cpp即可,其他都是一样的。
string.h>
usingnamespacestd;
在不同的环境下,可能会有不同的头文件包含了string的用法,可能的头文件有cstring,string。
在机试的环境中,一般使用string.h即可。
定义一个string和定义其他变量方式相同:
strings;
读入和输出string也只需要使用
cin>
>
s;
cout<
<
这是比c语言的字符数组要简单了很多的。
需要注意的是,string类型读入的时候与char数组的scanf读入一样,都是遇到空格符或者回车符就停止读入,当做一个完整字符串来处理,因此,使用string处理带空格的字符串是不明智的,其他情况下是都可以的。
string变量包含了很多强大的功能,如:
[cpp]viewplaincopyprint?
1.s[i];
//这么写,返回的就是字符串s第i+1位的字符,返回的类型是char型,其中,s[0]是它的第一位,与字符串相同。
2.s.size();
//返回字符串的长度,返回的长度是l,则s从s[0]到s[l-1]表示的是其每一位的字符。
3.if
(s1<
s2)
//两个string是可以方便的使用大小于符号以及等于号来比较大小的,比较的方式是,从左向右按位进行比较,每一位按照字典序来比较。
如”aaaa”<
”abc”<
”bcd”,但值得注意的一点是,比较的时候应用变量进行比较,即s1<
s2这种,而不能用”aa”<
”bb”这样,如果要比较他俩的大小,应这么写:
4.s1="
aa"
;
s2="
bb"
5.if
string类型还有很多强大的功能,但是对于机试来说,会使用以上三种功能就足够了。
char[50],char[100]这种字符数组与string类型很像,只不过他是C语言里面的用法,对于机试,只建议在输入带有空格字符的字符串时使用char数组,使用的方式是:
gets(s);
在这里,gets函数区别于scanf函数的是,gets函数会直接将一整行读进来,而不会遇到空格就停下来。
常见机试题类型
初级题常见的类型无非就是字符串处理类的题目和数字处理类的题目,在这里归结如下:
字符串处理类
字符串所有大写转小写:
1.for
(int
i=0;
i<
s.size();
i++)
2.
if
(s[i]>
=’A’
&
s[i]<
=’Z’)
3.
s[i]=s[i]-’A’+’a’;
//s[i]-’A’返回的是两个大写字母之间的差值,比如’C’与’A’的差值是2,这个差值是一个int类型,也可以直接提取出来使用。
给这个差值再加上字母’a’,相当于给’a’再往后推移二位,变成字母’c’。
这种用法是字符串内最普遍的一种用法,小写转大写也是一样。
删除满足指定要求的字符后输出:
在机试中,判定对错的方式是比较输出的结果,而非检查内部的结果,因此,“删除”对于机试来说,相当于“不输出”,也就是说,不需要调用s.erase()函数,只需要在遇到被删除的字符时,跳过,不输出即可。
2.{
(s[i]满足删除要求)
跳过;
4.
else
输出s[i];
5.}
倒转字符串:
与删除字符串的思路类似,倒转一个字符串,其实就是倒着输出,只需要将循环反过来就可以。
i=s.size()-1;
i>
=0;
i--)
字符串比较大小:
如果比较的规则与字符串的比较规则相同,则直接使用s1>
s2这种方式,如果规则不同,则用一重循环按位比较即可。
2、数字处理类
数字处理类的题目,最常见的两种考察形式是整数拆分、进制转换和排序。
整数拆分是指将一个整数拆分开每一位,比如123拆分成1,2,3。
整数拆分的思路有两种,第一种是直接用字符串读入,然后把每一位用字符的形式提取出来:
2.<
span
style="
white-space:
pre"
/span>
num[i]=s[i]-'
0'
还有一种思路是不断去除以10,把余数提取出来,方法是:
1.while
(n!
=0)
3.<
num[i]=n%10;
4.<
n=n/10;
5.<
i++;
6.}
进制转换:
进制转换又分为10进制转换成别的进制以及别的进制转换成10进制,进制转换其实特别简单,只需要记住如下代码:
10进制转换成X进制
num[i]=n%x;
n=n/x;
X进制转换成10进制
=length;
3.ans=ans*x+num[i];
4.}
其中,num[i]表示的是该x进制数的每一位,比如一个二进制数101,用这种转换方式去转换,ans的值从i=0到i=2处理后分别是1,2,5。
排序:
排序这个东西,其实不需要学习冒泡啊、快排啊之类的算法,应对机试,C++中自带的sort函数就可以很好的解决,请看下面一段代码
1.<
/pre>
pre
name="
code"
class="
cpp"
2.#include<
algorithm>
//这个是包含sort函数的头文件
3.using
namespace
std;
4.int
arr[100],n;
5.int
cmp(int
x,int
y)
//这个函数是sort函数比较两个元素优先级的函数,在这里计算出两个元素的优先级,然后返回即可。
6.{
7.
int
importance1,importance2;
8.
//此处插入代码计算x,y的重要性
9.
return
importance1<
importance2;
//此处返回小于号,意思是优先级小的在前,如return
x<