总体来说,最近一年的题,难易程度简单偏中等。
题总共分为五大类,分别是字符,排序,查找,算法题,其中二叉树单独拿出来考的
难易程度:百分之80属于简单题的范畴,剩下的属于运气题——————————。
一.字符串
经常考的题有:(字符串比较,字符串拼接,字符串排序,是否为公共子串,字符串翻转,字符串重排;)
字符串类的题就直接用map函数就行,剩下的百分之2.5的题用for循环输出结果就可以;
二.排序类
经常考的题有:(K个字母组合,问第几个字符或者数字,小朋友按照身高体重排序;)
三.查找类
经常考的题有:(查找中位数,小朋友查找身高体重;)
四.算法题(BFS,DFS;)
经常考的题有:(对角线上人数,迷宫,最优规划,背包问题;)
上面是几类高频的考试内容,以下是考试常用的几个函数 **
1.getline 函数,此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。
当 cin 读取数据时,一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。
getline(cin, inputLine); 举例: getline(cin, name);
2.sort函数,包含在头文件为#include 的c++标准库中,调用标准库里的排序方法可以实现对数据的排序。
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
#include
#include
using namespace std;
bool cmp(int a,int b);
main(){
//sort函数第三个参数自己定义,实现从大到小
int a[]={45,12,34,77,90,11,2,4,5,55};
sort(a,a+10,cmp);
for(int i=0;i<10;i++)
cout<b;
}
3.substr函数,返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
#include
#include
using` `namespace` `std;
int` `main()
{
string s(``"12345asdf"``);
string a = s.substr(0,5); ``//获得字符串s中从第0位开始的长度为5的字符串
cout << a << endl;
}
4.atoi函数,转化的是char[],c++标准库中字符串转化为int的函数。
int i_dec = std::stoi (str_dec,&sz);
int i_hex = std::stoi (str_hex,nullptr,16);
int i_bin = std::stoi (str_bin,nullptr,2);
int i_auto = std::stoi (str_auto,nullptr,0);
std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";
std::cout << str_hex << ": " << i_hex << '\n';
std::cout << str_bin << ": " << i_bin << '\n';
std::cout << str_auto << ": " << i_auto << '\n'
5.c_str()。标准库的string类成员函数,从一个string得到c类型的字符数组
#include
//需要包含cstring的字符串
#include
using namespace std;
int main()
{
//string-->char*
//c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同
//这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。
//因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中
const char *c;
string s = "1234";
c = s.c_str();
cout<
6.sscanf,sscanf()函数用于从字符串中读取指定格式的数据, int sscanf (char *str, char * format [, argument, ...]);
参数str为要读取数据的字符串;format为用户指定的格式;argument为变量,用来保存读取到的数据。
成功则返回参数数目,失败则返回-1,错误原因存于errno 中。
sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串请参考scanf()), 转换后的结果存于对应的变量中。
sscanf()与scanf()类似,都是用于输入的,只是scanf()以键盘(stdin)为输入源,sscanf()以固定字符串为输入源。
#include
int main(void)
{
char str[100] ="123568qwerSDDAE";
char lowercase[100];
int num;
sscanf(str,"%d %[a-z]", &num, lowercase);
printf("The number is: %d.\n", num);
printf("The lowercase is: %s.", lowercase);
return 0;
}
常考的遍历方法:
dfs和bfs
递归和动态规划的区别
相同点:
递归与动态规划是两个十分基本的算法,它们使用的思路都是分而治之,将一个大问题拆解成一个小问题。
不同点:
1.递归是从上而下(从大问题到小问题),而动态规划是由下而上(先解决小问题最后到大问题);
2.动态规划会储存每个小问题的结果,从而它的计算速度会比递归要快。(代价是动态规划的空间复杂度更高,即用空间换取的时间)。
3.动态规划是用递归实现的,递归是用函数实现的。
————————————分割线—————————————
需要学习知识点的题
5.写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
#include
using namespace std;
int main(){
string a;
while(getline(cin,a)){
int res=0;
int pos=a.find('x');
for(int i=pos+1;i='A'&&a[i]<='F'){
tmp=10+(a[i]-'A');
}
else{
tmp=a[i]-'0';
}
res=res*16+tmp;
}
cout<
需要知道十进制转为十六进制的原理:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。
例:将十六进制的(2B)H转换为十进制的步骤如下:
\1. 第0位 B x 16^0 = 11;
\2. 第1位 2 x 16^1 = 32;
\3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。
具体其他进制相互转换,请看大神博客:
https://www.cnblogs.com/gaizai/p/4233780.html#_labelConvert13