[PAT解题报告] 数字黑洞 (20)

转载from http://tech-wonderland.net/blog/pat-1069-the-black-hole-of-numbers.html

基本上模拟, 考察怎么得到这个四位数的每位的数字吧, 水题, 下面是可以AC的代码:

#include <cstdio>
#include <vector>
#include <functional>
#include <algorithm>
const int hole = 6174;
const int ndigits = 4;
std::vector<int> int2vec(int n) {
    std::vector<int> res(ndigits, 0);
    for(int i = ndigits - 1; i >= 0; --i, n /= 10)
        res[i] = n % 10;
    return res;
}
int vec2int(const std::vector<int> &vec) {
    int res = 0;
    int len = vec.size();
    int mul = 1;
    for(int i = len - 1; i >= 0; --i) {
        res += vec[i] * mul;
        mul *= 10;
    }
    return res;
}
int sortAndPrint(std::vector<int> &digits) {
    sort(digits.begin(), digits.end());
    int smaller = vec2int(digits);
    sort(digits.begin(), digits.end(), std::greater<int>());
    int bigger = vec2int(digits);
    int n = bigger - smaller;
    printf("%.4d - %.4d = %.4d\n", bigger, smaller, n);
    return n;
}
void gao(int n) {
    if(n <= 0|| n >= 10000)
        return ;
    std::vector<int> digits = int2vec(n);
    if(allTheSame(digits))  {
        printf("%.4d - %.4d = 0000\n", n, n);
        return ;
    }
    n = sortAndPrint(digits);
    while(n != hole) {
        digits = int2vec(n);
        n = sortAndPrint(digits);
    }
    return ;
}
int main() {
    int n;
    scanf("%d", &n);
    gao(n);
    return 0;
}
全部评论
真棒   我一点儿也看不懂
3 回复 分享
发布于 2017-12-08 11:36
有点坑爹啊,最大排序减去最小排序就好了。可是题目为什么说非递增或非递减呢,这样的排序就有好几种情况啊。。。
点赞 回复 分享
发布于 2021-04-29 15:04
n = input() n = list(n) if n[0] == n[1] == n[2] == n[3]:     print("N - N = 0000") n1 = n[:] n2 = n[:] while int(''.join(n1)) - int(''.join(n2)) != int(''.join(n)):     for j in range(len(n) - 1):         for i in range(len(n) - 1 - j):             if n1[i] <= n1[i + 1]:                 b = n1[i]                 n1[i] = n1[i + 1]                 n1[i + 1] = b             if n2[i] >= n2[i + 1]:                 a = n2[i]                 n2[i] = n2[i + 1]                 n2[i + 1] = a     if int(''.join(n1)) - int(''.join(n2)) ==int(''.join(n)):         break     print("{} - {} = {}".format(''.join(n1), ''.join(n2), int(''.join(n1)) - int(''.join(n2))))     n = list(str(int(''.join(n1)) - int(''.join(n2))))     n1 = n[:]     n2 = n[:] 总是有点小问题 求解答啊
点赞 回复 分享
发布于 2018-08-30 10:55
allTheSame(digits) 这个函数需要自己定义?
点赞 回复 分享
发布于 2017-12-08 11:16

相关推荐

只因飞飞:今日首绷
点赞 评论 收藏
分享
迷茫的大四🐶:干脆大厂搞个收费培训得了,这样就人均大厂了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务