码迷,mamicode.com
首页 > 其他好文 > 详细

例题3-5 Digit Generator UVA - 1583

时间:2018-09-12 14:01:34      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:code   区间   ==   int   例题   个数   --   scanf   存在   

我还想把它当成一道数学题做,但是发现代码实现太繁琐。直接搜索肯定会超时的,所以我要确定遍历的区间。区间的上界我找到了,但是我无法准确的确定区间下界。所以我觉得这个方法不靠谱,就看了题解。

题解用的预处理,先把所有十万以内的正整数都遍历一遍,得到离i最近的以i为最小生成元的数t。以t为下标,将i赋值给ans[t],继续遍历。如果接下来存在另一个i,为t的生成元,并且比原先的ans[t]更小,就ans[t]=i,否则不处理。最后直接输入一个数,输出答案数组中这个数的值即可。

#include <bits/stdc++.h>
#define N 100005
using namespace std;
int ans[100005];
int main()  {
    int n,p;
    scanf("%d",&n);
    for (int i=1;i<=100000;i++) {
        int sum=i,t=i;
        while (t!=0)    {
            sum+=t%10;
            t/=10;
        }
        if (ans[sum]==0||ans[sum]>i)
            ans[sum]=i;
    }
    while (n--) {
        scanf("%d",&p);
        printf("%d\n",ans[p]);
    }
    return 0;
}

例题3-5 Digit Generator UVA - 1583

标签:code   区间   ==   int   例题   个数   --   scanf   存在   

原文地址:https://www.cnblogs.com/yichuan-sun/p/9634185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!