题目
第一个是一个喝汽水的题,第二个是排序+去重,第三个是基础的十六进制转十进制。总的来说,题目都比较基础,考的都是一些C/C++的基本内容,而且题目没有明确说明是否能够调用库函数,这就很好办了,比如排序去重题,让你自己做你还要从一堆排序方法中考虑要用哪一个,调函数的话一个sort就解决了。
问题
基础不牢固
开始就报错说我的main函数有错误,还以为是每加return,结果加了还不行,以为是编译器问题,又去百度了一番,最后才发现是main后没加(),真的是太久没用C++了。
还有ASCII码表,考研专业课出了一道好像是某个字母的ASCII码值,瞬间蒙了。这里再记一下:字符0的码值为48,字符A的码值为65,字符a的码值为97。
刷题太少
以后应该尽量做一些基础题,笔试不会出太难的算法,这两天回顾一些C++基础,先不必关注类以及抽象。
代码
空瓶子
#include
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==0)
break;
cout<
}
return 0;
}
随机数排序去重
去重方法值得注意,一是可以排序后使用一次迭代,二是调用unique函数,不过该函数并不是将重复去掉,而是将重复放到数组末尾,所以还需要调用erase函数。
#include
#include
#include
using std::cout;
using std::cin;
using std::endl;
using std::vector;
using std::unique;
int main()
{
int n = 0, num = 0;
while(cin>>n)
{
vector vec;
for (int i = 0; i < n; i++)
{
cin >> num;
vec.push_back(num);
}
sort(vec.begin(), vec.end());
auto end_unique = unique(vec.begin(), vec.end());
vec.erase(end_unique, vec.end());
for (auto it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
}
return 0;
}
进制转换
主要是利用字符串函数处理,对于0x开头的十六进制,从左到右进行处理就是和十进制相似,每读一个字符,前面的数就乘以16
#include
#include
using namespace std;
int toDigit(char c)
{
if(c>='a' && c<='f')
return c-'a'+10;
else if(c>='A' && c<='F')
return c-'A'+10;
else
return c-'0';
}
int main()
{
string s;
while(cin>>s)
{
int n=s.size();
int x=0;
for(int i=2;i
x=x*16+toDigit(s[i]);
cout<
}
return 0;
}