uva 1583 Digit Generator(Uva-1583)

题目不再写入了,vj:https://vjudge.net/problem/UVA-1583#author=0

主要讲的是找一个数的小于它的一个数,小于它的那个数每一位加起来再加上那个数就会等于原来的数。没有就是0.

这个题实际上感觉也直接暴力for就行。数最大是1e5.那么最多5个9那么就是45,直接用stringstream或者其他的方法进行分位然后寻找就行。

找到就break那么这个数就是最小的。

刘汝佳的做法是直接预处理一个数组然后根据数组找数,实在是感觉非常的高明,同时代码量也比较小。

代码:

#include <iostream>
using namespace std;
#define max 100010
int a[max];
main()
{
    for(int i=1;i<max;i++)
    {
        int x=i;int y=i;
        while(x) {y+=x%10;x/=10;}
        if(a[y]==0||i<a[y]) a[y]=i;
    }
    int p,b;
    cin>>p;
    while(p--)
    {
        cin>>b;
        cout<<a[b]<<endl;
    }
}

这种思想应该得注意!!!直接预处理。