竞赛
考级
四,数位和为k的个数 首先循环L到R,然后通过 求出位数之和进行对比,如果正确,答案变量+1。 代码如下:
直接打上去数位 DP。时间复杂度:O(logl+logr)O(\log l + \log r)O(logl+logr) Code:
T4 本题考查嵌套循环,外层循环枚举区间[l,r][l,r][l,r],内层循环还是中规中矩的数位求和,中途统计一下合法的数字个数即可。 代码分析
这道题可以直接写暴力,最坏的情况需要枚举 10510 ^ {5}105 个数,一个数最长有5位, 则最坏情况的复杂度是 50550 ^ {5}505,没有超过 10810 ^ {8}108 。 先写一个 check () 函数: 接着写一个 for () 循环,里面加上 check () 函数: 注意:题目中写的是[l,r],所以for循环中的i要包含l和r。作者第一次没包含,WA了。 Code:
#include <iostream> using namespace std; int l,r; int k; int sum=0; int di(int x){//取数位和 sum=0; while(x!=0){ sum+=x%10; x/=10; } return sum; } int main(){ cin>>l>>r; cin>>k;//输入 int cnt=0; for(int i=l;i<=r;i++){ di(i); if(di(i)==k)//判断是否相等并判断 cnt++; } cout<<cnt;//输出 }
提交答案之后,这里将显示提交结果~