当前位置: 首页 > article >正文

蓝桥杯每日真题 - 第8天

题目:(子2023)

题目描述(14届 C&C++ B组A题)

解题思路:

该代码通过动态计算包含数字 "2023" 的子序列出现次数。主要思路是:

  1. 拼接序列:将1到2023的所有数字按顺序拆分为单个数字,并存储在数组arr中。

  2. 统计“2023”子序列:遍历数组中的数字,使用计数器分别记录数字203的累积出现次数,并通过组合计算出符合条件的 "2023" 子序列。

代码实现(C语言):

#include <stdio.h>
#include <stdlib.h>
long long solve(long long i)
{
  long long sum=1;
  while(i/=10)
    sum++;
  return sum;
}
int main(int argc, char *argv[])
{
  long long i,j,n=0,a=0,b=0,c=0,d=0;
  long long arr[10000];
  for(i=1;i<=2023;i++)
  {
    int I=i;
    int T=solve(i);
    for(j=T;j>0;j--)
    {
      arr[n+j]=I%10;
      I/=10;
    }
    n+=T;
  }
  for(i=1;i<=n;i++)
  {
    if(arr[i]==2)
    {
      a++;
      c+=b;
    }
    else if(arr[i]==0)
      b+=a;
    else if(arr[i]==3)
      d+=c;
  }
  printf("%lld",d);
  return 0;
}

得到运行结果:

代码分析 :

  • solve() 函数:计算一个数字的位数。通过不断除以10来计算位数。例如,2023 返回 4

  • main() 函数:

    • 序列拼接

      • 使用 for 循环,将1到2023的每个数字按位拆分,逐位存储在数组arr中。

      • T = solve(i); 获取当前数字的位数。

      • arr[n+j] = I % 10; 用于将每个位的数字逆序插入到 arr 中,直到数字 i 拆解完。

      • n += T; 更新当前已填充的总长度。

    • 查找“2023”子序列

      • 遍历 arr 数组,依次检查每个位置的数字。

      • a:累计每次遇到的数字 2 的数量。

      • b:累计每次遇到的数字 0 前面有多少个数字 2

      • c:累计每次遇到的数字 3 前面符合 20 序列的次数。

      • d:记录完整的 2023 子序列的数量。

  • printf("%lld", d);:输出符合条件的子序列总数。

难度分析

⭐️⭐️ 

总结

本代码通过逐位遍历和计数器的方式实现了"2023"子序列的统计。此算法无需存储完整的字符串,通过位置的动态更新提高了效率。


http://www.kler.cn/a/393569.html

相关文章:

  • sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?
  • C# 模拟浏览器自操作(自动化办公)
  • @ComponentScan:Spring Boot中的自动装配大师
  • css:盒子模型
  • python购物计算 2024年6月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析
  • ML 系列: 第 23 节 — 离散概率分布 (多项式分布)
  • [CKS] K8S ServiceAccount Set Up
  • UDP协议和TCP协议之间有什么具体区别?
  • Flink+Kafka中Source和Sink的使用
  • ONLYOFFICE8.2版本测评,团队协作的办公软件
  • 新160个crackme - 096-xtFusion-k1
  • 免费送源码:Java+springboot+MySQL 物流车辆管理系统的设计与实现 计算机毕业设计原创定制
  • kafka可视化管理平台-kafka-console-ui
  • vue el-date-picker 日期选择器禁用失效问题
  • 蓝队基础(详见B站泷羽sec)
  • 计算机网络之表示层
  • 【ReactPress】React + antd + NestJS + NextJS + MySQL 的简洁兼时尚的博客网站
  • FFmpeg 怎么裁剪m4a的音频,从一个时间点开始,裁剪15秒钟的视频
  • 如何在 IntelliJ IDEA 中去掉 Java 方法注释后的空行
  • CUDA error: device-side assert triggered 报错解决
  • androidstudio下载gradle慢
  • openai Realtime API (实时语音)
  • 鸿蒙版APP-图书购物商城案例
  • 2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序
  • ip addr show
  • 建筑施工特种作业人员安全生产知识试题