zoukankan      html  css  js  c++  java
  • UVa 1583

    1.题目大意

    如果a加上a的各个数字之和得到b,则说a是b的生成元。给出n其中$1le nle 100000$,求其最小生成元,若没有解则输出0。

    2.思路

    使用打表的方法打出各个数字a对应的b,存入s[b]中。

    3.应注意的问题

    (1) 没有解时输出0,也就意味着在开始打表前要把数组s[maxn]清零。利用memset实现,要加入string.h的头文件,而memset对数组操作时只能初始化为0或-1。

    (2) 要求求出的是最小生成元,也就意味着在存入s[b]之前要有所比较。

    4.代码

    #include"stdio.h"
    #include"string.h"
    #define maxn 100005
    int s[maxn];
    int main()
    {
        int i,T,n,a,b;
        memset(s,0,sizeof(s)); //数组清零
        for(i = 1; i < maxn ; i++)
        {
            a = i;
            b = i;
            while(a > 0)    //原数加上其各个数字之和得到a
            {
                b += a%10;
                a /= 10;
            }  
            if((s[b]==0) || (s[b]>i))  //确保其是最小生成元
                s[b] = i;
        }
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("%d
    ",s[n]);
        }
        return 0;
    }
    

      

    参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著

  • 相关阅读:
    Python multiprocessing相关疑问
    Tornado demo3
    WebSockets
    Tornado Demo1---webspider分析
    Python assert断言
    Python学习之--数据基础
    Python学习之--python概要
    Python学习之--函数/生成器/装饰器
    Python学习之文件操作
    Python操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/rgvb178/p/5947701.html
Copyright © 2011-2022 走看看