完美世界笔试9.7 C++B
第一题:
买股票的题:
不知为何,就是90???xdm哪里有问题啊帮看看
#include <vector> #include <iostream> #include <algorithm> int best_deal(std::vector<int>& vec) { //write code here int size = vec.size(); int max = 0; int num = 0; for (int i = 1; i < size; i++) { num += (vec[i] - vec[i - 1]); if (num > max) { max = num; }if (num < 0) { num = 0; } } return max; } int main(int argc, char* argv[]) { std::vector<int> vec; int n = 0; std::cin >> n; vec.resize(n); for (int i = 0; i < n; i++) std::cin >> vec[i]; int r = best_deal(vec); std::cout << r << std::endl; return 0; }
2:
二叉树转序
就杠杠递归~~~递归到最里层,然后按照压缩的次数还原
"abc[3,de[2,gg]f]abc"[ ] 之间的展开
2,gg ->gggg
[3,de[2,gg]f]->deggggfdeggggfdeggggf
abc[3,de[2,gg]f]abc->abcdeggggfdeggggfdeggggfabc
#include <iostream>
#include <string>
using namespace std;
int first = 1;
string dg(string s) {
bool flag = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '[' || s[i] == ']') {
//没结束还要继续递归
flag = 1;
break;
}
}
string S;
int L=0, R=0;
if (flag == 0) {
int N = s[0] - '0';
string temp(s.begin() + 2, s.end());
while (N--) {
S.append(temp);
}
return S;
}
else {
for (int i = 0; i < s.size(); i++) {
if (s[i] == '[') {
L = i;break;
}
}
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == ']') {
R = i;break;
}
}
if (first == 1) {
first = 2;
string l(s.begin(), s.begin() + L);
string r(s.begin() + R + 1, s.end());
string t(s.begin() + L + 1, s.begin() + R);
string tmp = dg(t);
S.append(l + tmp + r);
return S;
}
else {
string l(s.begin()+2, s.begin() + L);
string r(s.begin() + R + 1, s.end());
string t(s.begin() + L + 1, s.begin() + R);
int N = s[0] - '0';
string tmp = dg(t);
while (N--) {
S.append(l + tmp + r);
}
return S;
}
}
}
//TODO需要实现
void extract(std::string& in, std::string& out)
{
out = dg(in);
cout << out;//
}
//摘要(hash)算法,已经实现
unsigned make_hash(std::string& str)
{
int step = str.size() / 100;
if (step == 0)
step = 1;
unsigned hash = 0;
unsigned seed = 131;
for (int i = 0; i < str.size(); i += step)
{
hash = hash * seed + (int)str[i];
}
return hash;
}
//main,已经实现
int main()
{
std::string in, out;
//cin >> in;
in = "abc[3,de[2,gg]f]abc";
extract(in, out);
cout << make_hash(out) << endl;
}
不知道对不对,例子应该是A了
或者大佬有做了评论区分享下代码,弟弟学习一下~
感觉差不多吧,渣渣谢了两道,已经尽力的。
感觉差不多吧,渣渣谢了两道,已经尽力的。
那个树的,要自己手写结构,力不从心,就没做了~
最后的也就15*0.9+25*0.2估计笔试是凉了。
唉,许愿赐我一个面试吧~
#完美世界##笔经#