蓝桥杯备战day1

本文主要记录笔者备战蓝桥杯的day1。

目录

前言

一、基础题:求和

二、进阶题:回文日期

总结


前言

本文主要记录了备战蓝桥杯的day1刷题记录。


一、基础题:求和

我先把题目测试链接粘贴在下面:

P8772 蓝桥杯 2022 省 A 求和 - 洛谷

题目详细叙述如下:

思路一:

我的思路是先读取输入的整数n,动态分配能存储n个整数的数组并读取这n个整数;接着通过双重循环遍历数组,外层循环确定第一个元素,内层循环遍历该元素之后的所有元素,计算每对元素的乘积并累加到总和sum中;最后输出总和sum,实现数组中所有不同位置两元素乘积的累加求和。我的代码如下:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(){
    int n = 0;
    scanf("%d", &n);
    int* arr = (int*)malloc(sizeof(int) * n);
    for(int i = 0; i < n; i++){
        scanf("%d", &arr[i]);
    }
    int sum = 0;
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            int times = arr[i] * arr[j];
            sum += times;
        }
    }
    printf("%d", sum);
}

思路二:

改进的思路为数学公式优化实现,核心依据两两乘积和 = (元素总和)² - 元素平方和/2的推导逻辑,先读取数组元素后,第一次遍历计算元素总和并求平方,第二次遍历累加元素平方并从总和平方中减去,最后将结果除以2得到答案,该方式将时间复杂度从O(n²)降至O(n),大幅提升大数据量处理效率,且用long long类型避免数据溢出,我的代码如下:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(){
    int n = 0;
    scanf("%d", &n);
    int* arr = (int*)malloc(sizeof(int) * n);
    for(int i = 0; i < n; i++){
        scanf("%d", &arr[i]);
    }
    long long sum = 0;
    for(int i = 0; i < n; i++){
        sum += arr[i];
    }
    sum *= sum;
    for(int i = 0; i < n; i++){
        sum -= (arr[i] * arr[i]);
    }
    printf("%lld", sum / 2);
}

二、进阶题:回文日期

我先把题目测试链接粘贴在下面:

P8716 蓝桥杯 2020 省 AB2 回文日期 - 洛谷

题目详细叙述如下:

我的思路是先通过辅助函数判断闰年及日期合法性,再分两步查找目标日期,第一步从输入日期的年份开始枚举,将年份反转得到月日构造回文日期,筛选出合法且大于输入日期的第一个回文日期;第二步枚举两位数字AB,按ABABBABA格式构造特殊回文日期,筛选出合法且大于输入日期的第一个ABAB型回文日期,最终输出两个结果。我的代码如下:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool isLeapYear(int year) {
    return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}

bool isValidDate(int year, int month, int day) {
    if (year < 1000 || year > 9999) return false;
    if (month < 1 || month > 12) return false;
    if (day < 1) return false;
    switch(month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            return day <= 31;
        case 4: case 6: case 9: case 11:
            return day <= 30;
        case 2:
            return isLeapYear(year) ? (day <= 29) : (day <= 28);
        default:
            return false;
    }
}

int findNextPalindrome(int input) {
    int startYear = input / 10000; 
    for (int year = startYear; year <= 9999; year++) {
        int reversedYear = 0, temp = year;
        for (int i = 0; i < 4; i++) {
            reversedYear = reversedYear * 10 + temp % 10;
            temp /= 10;
        }
        int month = reversedYear / 100, day = reversedYear % 100;
        int date = year * 10000 + month * 100 + day;
        if (isValidDate(year, month, day) && date > input) {
            return date;
        }
    }
    return -1;
}

int findNextABABPalindrome(int input) {
    for (int ab = 10; ab <= 99; ab++) { 
        int a = ab / 10, b = ab % 10;
        int year = ab * 100 + ab; 
        int month = b * 10 + a;   
        int day = b * 10 + a;     
        int date = year * 10000 + month * 100 + day;
        if (isValidDate(year, month, day) && date > input) {
            return date;
        }
    }
    return -1;
}

int main() {
    int input;
    scanf("%d", &input);
    printf("%d\n", findNextPalindrome(input));
    printf("%d\n", findNextABABPalindrome(input));
    return 0;
}

总结

本文记录了备战蓝桥杯第一天的刷题过程,包含两道题目,基础题&quot;求和&quot;和进阶题&quot;回文日期&quot;。对于求和问题,作者从暴力双重循环(O(n²))优化到数学公式法(O(n)),通过元素总和的平方减去元素平方和再除以2的方式提高效率。回文日期问题则通过年份反转构造回文日期,并设计ABABBABA格式的特殊回文日期检测,使用辅助函数验证日期合法性。两题均给出完整代码实现,展示了算法优化思路和日期处理技巧。

相关推荐
强哥聊算力1 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
Navigator_Z5 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy5 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
YangYang9YangYan7 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl27 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风7 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技7 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程8 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生8 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构