zoukankan      html  css  js  c++  java
  • 卡布列克常数

    题目描述
    最近,小Q在数学兴趣课中了解了“卡布列克常数”。卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个最大的数和一个最小的数,然后用最大数减去最小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。
    例如:4321-1234=3087
    8730-378=8352
    8532-2358=6174
    7641-1467=6174
    ……
    小Q想,我能不能编程来验证呢?输入一个符合条件的四位数,然后验证运算过程。

    输入
    共1行,为任意一个不是用完全相同数字组成的四位数。

    输出
    变为卡布列克常数的运算过程,由若干行组成,每行是一个算式,不含空格。

    样例输入
    复制样例数据
    4321
    样例输出
    4321-1234=3087
    8730-378=8352
    8532-2358=6174

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int cmp(const void *a,const void *b)
    {
        return *(int*)b-*(int *)a;
    }
    int fun(int a[],int n)
    {
        int i,max=0,min=0;
        for(i=0;i<4;i++)
        {
            max=max*10+a[i];
            min=min*10+a[3-i];
        }
        printf("%d-%d=%d
    ",max,min,max-min);
        if(max-min==6174)
            return 0;
        else
        {
    
            n=max-min;
            for(i=0;i<4;i++)
            {
                a[i]=n%10;
                n/=10;
    
            }
             qsort(a,4,sizeof(a[0]),cmp);
            return fun(a,n);
        }
    }
    int main()
    {
        int n,a[4],b,i;
        scanf("%d",&n);
        for(i=0;i<4;i++)
        {
            a[i]=n%10;
            n/=10;
        }
        qsort(a,4,sizeof(a[0]),cmp);
        b=fun(a,n);
        return 0;
    }
    
    

    感觉自己的代码都挺复杂,哎哎 ,加油。

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319597.html
Copyright © 2011-2022 走看看