题目链接: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;
}