• 笔试面试相关记录(7)


    (1)

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a[][3] = {1, 2, 3, 4, 5, 6};
    6. //ptr是一个指向有三个int元素的数组,ptr++是以3*sizeof(int)为单位
    7. int (*ptr)[3] = a;
    8. printf("%d%d\n", (*ptr)[1], (*ptr)[2]);
    9. printf("%p, %p, %p\n", ptr, &a[0][0], a);
    10. ++ptr;
    11. printf("%d%d\n", (*ptr)[1], (*ptr)[2]);
    12. printf("%p, %p, %d, %d\n", ptr, &a[1][0], ptr-a, &a[1][0]-&a[0][0]);
    13. return 0;
    14. }
    15. 输出
    16. 23
    17. 0x7fff29f6fca0, 0x7fff29f6fca0, 0x7fff29f6fca0
    18. 56
    19. 0x7fff29f6fcac, 0x7fff29f6fcac, 1, 3

    (2)

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int arr[5] = {1, 2, 3, 4, 5};
    6. int * p[5];
    7. // int* ref[5] = {1, 2, 3, 4, 5}; //编译出错
    8. int (*p1)[5] = &arr;
    9. int (&p2)[5] = arr;
    10. printf("%d, %d, %d\n", (*p1)[1], p2[2], p1[0][2]);
    11. // 一下三个值相等
    12. printf("%p, %p, %p", *p1, arr, p1);
    13. return 0;
    14. }
    15. 输出:
    16. 2, 3, 3
    17. 0x7ffdb545d940, 0x7ffdb545d940, 0x7ffdb545d940

    (3)

    1. #include
    2. using namespace std;
    3. class A {
    4. public:
    5. A(){cout << "A()" << endl;}
    6. A(int a){cout << "A(int)" << endl;}
    7. A(int a, int b){cout << "A(int,int)" << endl;}
    8. };
    9. class B:public A{
    10. public:
    11. B(){cout << "B()" << endl;}
    12. using A::A;
    13. };
    14. int main()
    15. {
    16. B b();
    17. B c(1);
    18. B d(1, 2);
    19. return 0;
    20. }
    21. 输出:
    22. A(int)
    23. A(int,int)

    (4) 输入n,m,n表示点的个数,m表示查询次数,接下来n-1个点,p2,p3,p4....pn,表示节点 i 的父节点是pi,根节点编号为1,例如输入

    3 3
    1 1
    1 2 3

    表示总共3个结点,查询三次,节点2的父节点是1,节点3的父节点是1,对于每次的查询,输出这个点到其他所有点的距离之和,

       1
      /  \
     2   3     查询节点1,则1到2的距离是1,1到3的距离是1,最终结果是2;

                  查询节点2,则2到1的距离是1,2到3的距离是2,最终结果是3;

                 查询节点3,则3到1的距离是1,3到1的距离是2,最终结果是3;

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. void dfs(vectorint>>& grid, int cur, set<int>& node, int depth, int& sum, int n) {
    6. if (node.find(cur) == node.end()) {
    7. sum += depth;
    8. node.insert(cur);
    9. }
    10. for (int i = 1; i <= n; i++) {
    11. if (node.find(i) == node.end() && grid[cur][i] == 1) {
    12. dfs(grid, i, node, depth+1, sum, n);
    13. }
    14. }
    15. }
    16. int main() {
    17. int n, m;
    18. while (cin >> n >> m) {
    19. int t;
    20. vectorint>> grid(n+1, vector<int>(n+1, 0));
    21. for (int i = 2; i <= n; i++) {
    22. cin >> t;
    23. grid[i][t] = 1;
    24. grid[t][i] = 1;
    25. }
    26. vector<int> ans;
    27. for (int i = 0; i < m; i++) {
    28. cin >> t;
    29. set<int> set_node;
    30. int sum = 0;
    31. dfs(grid, t, set_node, 0, sum, n);
    32. ans.push_back(sum);
    33. }
    34. for (int i = 0; i < m; i++) {
    35. cout << ans[i] << " ";
    36. }
    37. cout << endl;
    38. }
    39. return 0;
    40. }

    (5)输入四个数,n,a,b,c,n表示最多可以进行的操作次数,第 i 次的操作定义为如下:从a,b,c中选取一个严格大于 i 的数字,将其值减去 i ,被剪掉的部分不参与后期的计算,剩下的部分组成新的a,b,c,问a,b,c可以组成多少种面积大于零的三角形。例如如下:

    输入5 3 4 5

    输出10

    (1,4,4)  (2,2,2)  (2,4,3)  (2,4,5)  (3,2,4) (3,3,3) (3,3,5) (3,4,2) (3,4,4) (3,4,5)   10种

    解释:最多可以进行5次操作,第一次操作将5变成5-1=4,则(3,4,4)可以组成三角形,第二次操作可以将3变成3-2=1,则(1,4,4)可以组成三角形。以此类推。

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. bool check(vector<int>& nums) {
    7. if (nums[0] + nums[1] > nums[2] && nums[1] + nums[2] > nums[0] && nums[2] + nums[0] > nums[1]) {
    8. return true;
    9. }
    10. return false;
    11. }
    12. void backtrace(vector<int> nums, int op, set& set_str, int max_op) {
    13. if (op > max_op) {
    14. return;
    15. }
    16. if (check(nums)) {
    17. string nums_str = to_string(nums[0]);
    18. for (int k = 1; k < 3; k++) {
    19. nums_str += "-";
    20. nums_str += to_string(nums[k]);
    21. }
    22. set_str.insert(nums_str);
    23. }
    24. for (int i = 0; i < 3; i++) {
    25. vector<int> t = nums;
    26. if (t[i] > op) {
    27. t[i] = t[i] - op;
    28. backtrace(t, op+1, set_str, max_op);
    29. }
    30. }
    31. }
    32. int main() {
    33. int n, a, b, c;
    34. while (cin >> n >> a >> b >> c) {
    35. vector<int> nums{a, b, c};
    36. set set_str;
    37. backtrace(nums, 0, set_str, n);
    38. for (auto it = set_str.begin(); it != set_str.end(); it++) {
    39. cout << *it << " ";
    40. }
    41. cout << set_str.size() << endl;
    42. }
    43. return 0;
    44. }

  • 相关阅读:
    stm32看门狗
    【C++ techniques】要求/禁止/判断—对象产生于堆中
    超全整理,服务端性能测试-docker部署tomcat/redis(详细步骤)
    C语言文件操作(详解)
    【Spring Security】安全框架学习(一)
    碳酸钙/GPC3单克隆抗体介导阿霉素二氧化硅纳米粒/DOX-GNRs@mSiO2-HA-RGD纳米制备方法
    Go语言创建HTTP服务器
    PC_DRAM
    AI时代:探索个人潜能的新视角
    Docker--未完结
  • 原文地址:https://blog.csdn.net/wj617906617/article/details/133365174