非官方题解
2025-03-16 22:13:28
发布于:北京
5阅读
0回复
0点赞
这道题可以直接写暴力,最坏的情况需要枚举 个数,一个数最长有5位, 则最坏情况的复杂度是 ,没有超过 。
先写一个 check () 函数:
bool check (std::string s, int k)
{
int len = s.length ();
int sum = 0;
for (int i = 0; i < len; ++ i)
sum += s[i] - '0';
//std::cout << sum << ' ';
return sum == k;
}
接着写一个 for () 循环,里面加上 check () 函数:
int cnt = 0;
for (int i = l; i <= r; ++ i)
if (check (std::to_string(i), k)) cnt ++;
注意:题目中写的是[l,r],所以for循环中的i要包含l和r。作者第一次没包含,WA了。
Code:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <random>
//#define endl "\n"
#define Ll long long
#define true 1
#define false 0
//using namespace std;
const int N = 1e3 + 10, M = 1e2 + 10;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
Ll T = 1;
bool check (std::string s, int k)
{
int len = s.length ();
int sum = 0;
for (int i = 0; i < len; ++ i)
sum += s[i] - '0';
//std::cout << sum << ' ';
return sum == k;
}void solve ()
{
//main;
int l, r; std::cin >> l >> r;
int k; std::cin >> k;
int cnt = 0;
for (int i = l; i <= r; ++ i)
if (check (std::to_string(i), k)) cnt ++;
std::cout << cnt << std::endl;
return ;
}int main (int argc, const char * argv[])
{
//main;
//cin >> T;
while (T --)
{
solve ();
}return 0;
}
这里空空如也
有帮助,赞一个