zoukankan      html  css  js  c++  java
  • UVA

    题目大意: 给定两个数 n 和 m ,假设长度为 m 的数满足对于每一个 i (n <= i <= m)。数字的前 i 位都能被 i 整除,那么这个数就是超级数,求出字典序最小的符合要求的超级数。

    解题思路:直接暴力即可,假设每次进行整除推断的时候,对当前数每位都进行取余运算,那么将会超时,因此每 18 位进行一次取余(long long的数据范围为:-9223372036854775808..9223372036854775807,这样在 1S 左右就能够AC了。



    #include <cstdio>
    
    int n, m, A[35];
    
    bool judge(int cnt) {
        long long tmp = 0;
        for (int i = 0; i < cnt; ++i) {
            tmp = tmp * 10 + A[i];
            if (i == 18)
                tmp %= cnt;
        }
    
        return tmp % cnt;
    }
    
    bool DFS(int cur) {
        if (cur == m)
            return true;
    
        for (int i = cur ? 0 : 1; i < 10; ++i) {
            A[cur] = i;
            if ((cur < n - 1 || !judge(cur + 1)) && DFS(cur + 1))
                return true;
        }
    
        return false;
    }
    
    int main() {
        int T, cnt = 0;
        scanf("%d", &T);
        while (T--) {
            printf("Case %d: ", ++cnt);
            scanf("%d%d", &n, &m);
            if (DFS(0)) {
                for (int i = 0; i < m; ++i)
                    printf("%d", A[i]);
                puts("");
            }
            else
                puts("-1");
        }
        return 0;
    }
  • 相关阅读:
    Elasticsearch 内存配置应用案例
    shell进阶篇之字典和数组结合应用案例
    shell进阶篇之数组应用案例
    nginx的负载均衡
    nginx的反向代理
    ajax的几种使用
    springboot整合Redis
    java的Spring中@Value注解的使用
    Redis的五种数据类型
    冒泡排序
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6900158.html
Copyright © 2011-2022 走看看