Digit Generator

 

第一眼看到这题,会觉得这道题很简单,只要每一个值枚举就好了,但是他并不是一次性的去得出结果,多组数据,每次执行都需要n次,当n非常大的时候,就会超时,所以我们不妨将他们的数据全部保存起来,比如当1是generator时,他的结果是x,将x作为下标,将1作为value,其实有点类似于哈希表,每次输入一个数时,只要给出下标就可以立刻找出generator,这样每次都需要执行n次就变成了只需要执行n次。

代码如下:

#include<stdio.h>
#include<string.h>
int a[100050];

int main(void)
{
    int i,T,j;
    memset(a, 0, sizeof(a));
    for (i = 0; i < 100005; i++)
    {
        int m = i;
        int sum = i;
        while (m)
        {
            sum += m % 10;
            m /= 10;
        }
        if(a[sum] == 0||i<a[sum]) a[sum] = i;
    }
    scanf("%d", &T);    
    for (j = 0; j < T; j++)
    {
        int h;
        scanf("%d", &h);
        printf("%d\n", a[h]);
    }
    return 0;
}

 

posted @ 2021-01-25 15:27  loliconsk  阅读(81)  评论(0)    收藏  举报