• 数据结构day11


    总结:自己二叉树写蒙圈了,pta答案网上良莠不齐,所以我选择跟着算法笔记刷,这两天写了不少简单题,今天写了5个简单模拟题,最后的日期差值还有问题没有解决;

    Codeup新家 (hustoj.com)

    日期差值_牛客题霸_牛客网 (nowcoder.com)

    我们就先看日期差值这题吧,我想的是用第一个日期的总天数减去第二个日期的总天数,在牛客网上全通过了,但是在codeup上显示错误,尚未找到错误的地方;

    还值得一提的是,因为我考虑到多组输入,应该需要把输入改为while...EOF,但是在vs2022中需要输入三次ctrl+z才能到eof,还没有弄清楚为什么。

    先展示我的思路:

    1. #include<iostream>
    2. using namespace std;
    3. bool is_leap_yr(int y) {
    4. if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
    5. return 1;
    6. }
    7. return 0;
    8. }
    9. int sum_day(int y, int m, int d) {
    10. int sum = 0;
    11. int month[13] = {0, 31,28,31,30,31,30,31,31,30,31,30,31 };//1月开始,下标0不算
    12. if (is_leap_yr(y)) {
    13. month[2] += 1;
    14. }
    15. sum += (y * 365 + y / 4 - y / 100 + y / 400);
    16. for (int i = 1; i <= m-1; i++) {//月份是1-->m-1,m不算
    17. sum += month[i];
    18. }
    19. return sum + d;
    20. }
    21. int main() {
    22. int y1, m1, d1, y2, m2, d2;
    23. scanf("%4d%2d%2d", &y1, &m1, &d1);
    24. scanf("%4d%2d%2d", &y2, &m2, &d2);
    25. int sum1 = sum_day(y1, m1, d1);
    26. int sum2 = sum_day(y2, m2, d2);
    27. if (sum1 >= sum2) {
    28. cout << sum1 - sum2 + 1;
    29. }
    30. else {
    31. cout << sum2 - sum1 + 1;
    32. }
    33. return 0;
    34. }

    再展示算法笔记中的思路,使用的是ans变量从第一个日期慢慢加到第二个日期,得出的答案,值得参考,但是我没采用的原因是:如果两个日期差距很大,循环次数会非常多。 

    第二题:题目详情 - 1022 D进制的A+B (pintia.cn)

    1. #include<iostream>
    2. #include<vector>
    3. using namespace std;
    4. int main() {
    5. //10-->m进制数,可能超过int范围,选择用数组保存后逆序输出
    6. vector<int>v;
    7. int a, b, m;
    8. cin >> a >> b >> m;
    9. int sum = a + b;
    10. do {//sum一开始为0时可以用do...while循环
    11. v.push_back(sum % m);
    12. sum /= m;
    13. } while (sum);
    14. for (vector<int>::iterator i = v.end() - 1; i != v.begin(); i--) {
    15. cout << *i;
    16. }
    17. cout << *(v.begin());
    18. return 0;
    19. }

    第三个是:题目详情 - 1032 挖掘机技术哪家强 (pintia.cn) 

    这题我感觉我的做法比答案要好一些,因为是输入的for循环中就找到了答案

    1. #include<iostream>
    2. using namespace std;
    3. int main() {
    4. int n;
    5. cin >> n;
    6. //注意是n+1(因为可能是第n个学校),列表初始化
    7. int* sum = new int[n+1] {0};
    8. int maximum = 1,info,score;
    9. for (int i = 0; i < n; i++) {
    10. cin >> info >> score;
    11. sum[info] += score;
    12. if (sum[maximum] < sum[info]) {
    13. maximum = info;
    14. }
    15. }
    16. cout << maximum << ' ' << sum[maximum];
    17. delete[]sum;
    18. return 0;
    19. }

    第四个是:题目详情 - 1036 跟奥巴马一起编程 (pintia.cn) 

     这一题答案选择直接打印,空间复杂度比我用二维数组储存要好很多。

    1. #include<iostream>
    2. using namespace std;
    3. //对比算法笔记,他选择直接打印,没有使用数组储存,空间复杂度更好;
    4. int main() {
    5. int n;
    6. char c;
    7. cin >> n >> c;
    8. char arr[11][21];
    9. int row = n % 2 == 0 ? n/2 : n / 2 + 1;//注意奇数要四舍五入,即+1
    10. for (int i = 0; i < row; i++) {
    11. for (int j = 0; j < n; j++) {
    12. if (i == 0 || i == row-1||j==0||j==n-1) {
    13. arr[i][j] = c;
    14. }
    15. else {
    16. arr[i][j] = ' ';
    17. }
    18. }
    19. }
    20. for (int i = 0; i < row; i++) {
    21. for (int j = 0; j < n; j++) {
    22. cout << arr[i][j];
    23. }
    24. cout << endl;
    25. }
    26. return 0;
    27. }

  • 相关阅读:
    【开源教程12】疯壳·开源编队无人机-串口(视觉数据获取)
    绿盾控制台如何给未授权终端分配相应权限
    CSS border边框(理解网页边框制作)
    5.36 BCC工具之ucalls.py解读
    轻松掌握JavaScript字符串操作的10个小技巧
    神经网络解决回归问题,神经网络做回归问题
    【数学】双根号求值域问题
    Rabbitmq安装-docker版
    18.C++中模板参数类型推断与引用
    【问题复盘】在Ubuntu 20.04下安装OFED驱动
  • 原文地址:https://blog.csdn.net/weixin_58073817/article/details/126961682