沈阳企业网站,安卓app下载安装,网站开发使用的开发工具,广州公司注册虚拟虚拟地址题目#xff1a;#xff08;子2023#xff09;
题目描述#xff08;14届 CC B组A题#xff09; 解题思路#xff1a;
该代码通过动态计算包含数字 2023 的子序列出现次数。主要思路是#xff1a; 拼接序列#xff1a;将1到2023的所有数字按顺序拆分…题目子2023
题目描述14届 CC B组A题 解题思路
该代码通过动态计算包含数字 2023 的子序列出现次数。主要思路是 拼接序列将1到2023的所有数字按顺序拆分为单个数字并存储在数组arr中。 统计“2023”子序列遍历数组中的数字使用计数器分别记录数字2、0、3的累积出现次数并通过组合计算出符合条件的 2023 子序列。 代码实现C语言 #include stdio.h
#include stdlib.h
long long solve(long long i)
{long long sum1;while(i/10)sum;return sum;
}
int main(int argc, char *argv[])
{long long i,j,n0,a0,b0,c0,d0;long long arr[10000];for(i1;i2023;i){int Ii;int Tsolve(i);for(jT;j0;j--){arr[nj]I%10;I/10;}nT;}for(i1;in;i){if(arr[i]2){a;cb;}else if(arr[i]0)ba;else if(arr[i]3)dc;}printf(%lld,d);return 0;
}
得到运行结果 代码分析 solve() 函数计算一个数字的位数。通过不断除以10来计算位数。例如2023 返回 4。 main() 函数 序列拼接 使用 for 循环将1到2023的每个数字按位拆分逐位存储在数组arr中。 T solve(i); 获取当前数字的位数。 arr[nj] I % 10; 用于将每个位的数字逆序插入到 arr 中直到数字 i 拆解完。 n T; 更新当前已填充的总长度。 查找“2023”子序列 遍历 arr 数组依次检查每个位置的数字。 a累计每次遇到的数字 2 的数量。 b累计每次遇到的数字 0 前面有多少个数字 2。 c累计每次遇到的数字 3 前面符合 20 序列的次数。 d记录完整的 2023 子序列的数量。 printf(%lld, d);输出符合条件的子序列总数。
难度分析
⭐️⭐️ 总结
本代码通过逐位遍历和计数器的方式实现了2023子序列的统计。此算法无需存储完整的字符串通过位置的动态更新提高了效率。