UVa 1583 - Digit Generator

来源:互联网 发布:miru隐形眼镜知乎 编辑:程序博客网 时间:2024/06/05 10:38

题目链接:点击打开链接

解题思路:打表。遍历1到1000000+10的数,注意已经存储过的不应该更新,不然无法保证是最小生成元。注意看sumDigit函数中的一个if判断。

代码:

#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <cmath>using namespace std;int n;const int maxn = 1000000+10;int a[maxn];int sumDigit(int num){    int ans = 0;    while(num)    {        ans += num%10;        num /= 10;    }    return ans;}int main(){   memset(a, 0, sizeof(a));   for(int i = 0; i < maxn; i++)   {       int tmp = i + sumDigit(i);       if(!a[tmp])       {           a[tmp] = i;       }   }   int n;   while(scanf("%d", &n) == 1)   {       int num;       for(int i = 0; i < n; i++)       {           scanf("%d", &num);           printf("%d\n", a[num]);       }   }   return 0;}


0 0