程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA - 10624 Super Number

UVA - 10624 Super Number

編輯:C++入門知識

UVA - 10624 Super Number


題目大意: 給定兩個數 n 和 m ,如果長度為 m 的數滿足對於每個 i (n <= i <= m),數字的前 i 位都能被 i 整除,那麼這個數就是超級數,求出字典序最小的符合要求的超級數。

解題思路:直接暴力就行,如果每次進行整除判斷的時候,對當前數每位都進行取余運算,那麼將會超時,因此每 18 位進行一次取余(long long的數據范圍為:-9223372036854775808..9223372036854775807,這樣在 1S 左右就可以AC了。
 

#include 

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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved