题目链接:http://acm.zzuli.edu.cn/problem.php?id=2486
时间限制: 1 Sec  内存限制: 128 MB

题目描述

冬至到,吃水饺。L同学和他们班的同学在包饺子,这时M同学问了L一个问题:“一个正整数a,它本身加上它每个位上的数字的和为b,比如a=123,b=123+1+2+3=129。设b在大于1且小于100000的整数范围内任意取值,是不是都能找到对应的a啊?”L答道:“肯定不是啦,不信的话我给你写个程序验证一下。”可是L手上全都是面粉,于是他想让你帮他写一下这个程序,如果你成功写出来了,L同学就给你一个AC.

输入

一个正整数T(1≤T≤100),代表有T组样例。之后有T行,每组样例包含一个正整数b(1≤b≤100000)

输出

输出b对应的a,如果有多个对应的a,输出最小的,如果没有对应的a,就输出"gg"(不含引号),每组输出占一行

样例输入

3
129
120
20189

样例输出

123
114
gg

解题思路

首先先打个表,把2到100000的b都求出来,并记录能得到b的最小的那个数,即b[s]=i,s为i本身加上它每个位上的数字的和,b[s]保留的是最小的i。

#include <stdio.h>
#include <string.h>
int edge(int n)
{
    int ans = n;
    while (n)
    {
        ans += n % 10;
        n /= 10;
    }
    return ans;
}
int main()
{
    int s, t, n;
	int b[100050];
    memset(b, 0, sizeof(b));
    for (int i = 2; i < 100000; i++)
    {
        s = edge(i);
        if (!b[s])
            b[s] = i;
    }
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        if (b[n])
            printf("%d\n", b[n]);
        else printf("gg\n");
    }
    return 0;
}