ZOJ-1177-K-Magic Number

Posted angel-demon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ-1177-K-Magic Number相关的知识,希望对你有一定的参考价值。

就是分别以1到9作为开头构造结果,取最小答案。看了参考书之后才做出来,对参考书上的代码进行了一些改进

Accepted 1177 C++11 0 408
#include "bits/stdc++.h"
using namespace std;
// 参考书上说经在线测试ans的位数最高在15000以内,所以MAXL定为15000
const int MAXL = 15000;
int num[MAXL], ans[MAXL], ansLen;
void saveSmaller(int len) {
    for (int i = len; i > 0; i--) {
        ans[i] = num[i];
    }
    ansLen = len;
}
void build(int k) {
    int carry = 0, pos = 0;
    // 进入循环我们要构造第pos + 1位,当pos + 1 == ansLen的时候num[pos] 一定大于 ans[pos]就算构造成功也会比ans大 
    while (pos < ansLen - 1) {
        carry += num[pos] * k;
        num[++pos] = carry % 10;
        carry /= 10;
        // 当构造成功并且num的长度小于ans的时候说明num < ans,更新ans 
        if (carry == 0 && num[pos] == num[0]) {
            saveSmaller(pos);
            return;
        }
    }
}
int main() {
    int t, n;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        ansLen = MAXL;
        // 一个数开头不能是0,所以从1到9构造结果,并选取最小的作为答案 
        for (int i = 1; i <= 9; i++) {
            num[0] = i;
            build(n);
        }
        for (int i = ansLen; i; i--) {
            printf("%d", ans[i]);
        }
        puts(""); 
        if (t != 0) {
            puts("");
        }
    }
    return 0;
}

 

以上是关于ZOJ-1177-K-Magic Number的主要内容,如果未能解决你的问题,请参考以下文章

代码杂谈-SQL中的rank&row_number函数

ORA-01722: 使用 to_number 时号码无效

php number_format用法(代码实例)

C++ 多次打印“once *some number* is *another number*”,而我没有在代码中打印任何内容(我需要在接下来的半小时内得到答案)

if .. else number 小于,无法访问的代码

FZU1004-Number Triangle经典动归题,核心思路及代码优化