当前位置:   article > 正文

2022腾讯后台&综合笔试题解_腾讯后台笔试2022

腾讯后台笔试2022

T1:竖着读

给n个数字字符串,每个字符串长度都为m,然后按照每一列从上往下读构成m个字符串,求这m个排序后的字符串,去掉前导0,排序输出。

例子:

输入:

3

01234

12345

01234

输出:

10 121 232 343 454

此题比较简单,就是直接把列序列用字符串存起来,然后使用stoi将字符串转成整数,接着再进行排序就可以A了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. cin>>n;
  7. vector<string> res;
  8. while(n--){
  9. string s;
  10. cin>>s;
  11. res.push_back(s);
  12. }
  13. vector<int> tmp;
  14. for(int i = 0; i < res[0].size(); i++){
  15. string cur = "";
  16. for(int j = 0; j < res.size(); j++){
  17. cur += res[j][i];
  18. }
  19. tmp.push_back(stoi(cur));
  20. }
  21. sort(tmp.begin(), tmp.end());
  22. for(int i = 0; i < tmp.size() - 1; i++){
  23. cout<<tmp[i]<<" ";
  24. }
  25. cout<<tmp[tmp.size() - 1]<<endl;
  26. return 0;
  27. }

T2: 删除非质数下标后的最终元素

给一个数组,下标从1-n,每次淘汰下标非质数的数字,但是题目给的让我很迷惑,题目删除的即说ai且i为非质数的,让我好一顿纠结!最后就是循环删除,问最后剩下的一个数字是什么?

使用质数筛法进行处理。

  1. class Solution {
  2. public:
  3. const int MAXN = 1e5+10;
  4. int prime[MAXN+1];
  5. void getPrime(){
  6. memset(prime, 0, sizeof(prime));
  7. for(int i = 2; i <= MAXN; i++){
  8. if(!prime[i]) prime[++prime[0]] = i;
  9. for(int j = 1; j <= prime[0] and prime[j] <= MAXN /i; j++){
  10. prime[prime[j]*i] = 1;
  11. if(i % prime[j] == 0) break;
  12. }
  13. }
  14. }
  15. int getNumber(vector<int>& a) {
  16. getPrime();
  17. //将所有素数存入set
  18. unordered_set<int> st;
  19. for(int i = 1; i <= prime[0]; i++) {
  20. st.insert(prime[i]);
  21. }
  22. //这里使用两个交替数组,用来存储剩余数字
  23. vector<int> pre = a, cur;
  24. while(cur.size() != 1){
  25. cur.clear();
  26. for(int i = 1; i <= pre.size(); i++){
  27. if(st.count(i)) cur.push_back(pre[i-1]);
  28. }
  29. pre = cur;
  30. }
  31. return cur[0];
  32. }
  33. };

T3:防御攻击最小距离

给一堆字符串代表一排士兵,士兵编号1~n,字符串中’0’的士兵代表进攻性的,‘1’的代表防御性的,每个士兵的攻击力或守备力为其下标值。将士兵分组,0~pos的是进攻组,只算攻击力,pos+1~n的是防御组,只算防御力。pos可以取0~n。求攻击组的攻击力和防御组的防御力的差的绝对值的最小值。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main(){
  5. int n;
  6. string str;
  7. cin >> n >> str;
  8. int len = n;
  9. vector<ll> attack(n+2, 0), protect(n+2, 0);
  10. //攻击做前缀
  11. for(int i = 1; i <= len; i++){
  12. attack[i] = attack[i-1];
  13. if(str[i-1] == '0') attack[i] += i;
  14. }
  15. //防御做后缀
  16. for(int i = len; i >= 1; i--){
  17. protect[i] = protect[i+1];
  18. if(str[i-1] == '1') protect[i] += i;
  19. }
  20. ll value = INT_MAX;
  21. for(int i = 0; i <= len; i++){
  22. ll cur = abs(attack[i] - protect[i+1]);
  23. if(cur < value) value = cur;
  24. }
  25. cout << value;
  26. return 0;
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/570359
推荐阅读
相关标签
  

闽ICP备14008679号