首页 > 其他 > 详细

UVa1583 - Digit Generator题解

时间:2020-10-30 22:39:50      阅读:46      评论:0      收藏:0      [点我收藏+]

题目

题目链接

UVa1583 - Digit Generator

题目大意

如果x加上x的各个数字之和得到y,就说x是y的生成元,例如256的生成元是245(2+4+5+245)。
给出n(1≤n≤100000),求最小生成元。无解输出0。
例如,n=216,121,2005时的解分别为198,0,1979。

样例输入

3
216
121
2005

样例输出

198
0
1979

题解

能首先想到的是给出n后,把i从1到n一个个尝试,是否为生成元。若为生成元,则退出循环,此时就是最小生成元。
但这样有个麻烦,一两次还好,如果要求成千上万次,程序就会很慢了。
所以换个想法,因为重复了多次i从1到n的计算,不如直接把计算结果保存下来,等用的时候一查表就知道最小生成元了。
这样程序就出来了。
Then show the code.

#include <stdio.h>

int a[100100];

int main(){
    int n, temp;
    // int kase = 0;
    scanf("%d", &n);
    //打表
    for(int i=1; i<100000; i++){
        int temp = i, sum1 = i;
        while(temp){
            sum1 += temp%10;
            temp /= 10;
        }
        //注意题目求的是“最小生成元”
        if(!a[sum1] || a[sum1] > i)
            a[sum1] = i;
    }

    for(int i=0; i<n; i++){
        scanf("%d", &temp);
        //这个憨批最后输出空行坑了我第二次了
        // if(kase++)
        //     printf("\n");
        printf("%d\n", a[temp]);
    }

    return 0;
}

UVa1583 - Digit Generator题解

原文:https://www.cnblogs.com/1v7w/p/13904436.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!