abc101d<打表,数学>

题目

D - Snuke Numbers

思路

打表找规律:

void bf(int n)
{
    vector<int> ans;
    double minn = double(n) / get(n);
    for (int i = n - 1; i >= 1; i --)
    {
        double t = double(i) / get(i);
        if (t <= minn + 1e-9)
        {
            minn = t;
            ans.push_back(i);
        }
    }

    int cnt = ans.size();
    for (int i = 0; i < ans.size(); i ++)
    {
        printf("%03d  %d\n", i+1, ans[cnt - i - 1]);
    }
}

代码

点击查看代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
using LL = long long;

double s(LL x)
{
    int res = 0;
    LL y = x;
    while (x)
        res += (x % 10), x /= 10;
    return (1.0 * y) / (1.0 * res);
}

void solv()
{
    int n;
    cin >> n;

    LL ans = 0;
    LL base = 1;
    while (n--)
    {
        while (true)
        {
            if (s(ans + base) > s(ans + base * 10))
                base *= 10;
            else
                break;
        }
        ans += base;
        cout << ans << '\n';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    // cin >> T;
    while (T--)
        solv();
    return 0;
}
posted @   O2iginal  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示