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

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

  • 相关阅读:
    csu 1604 SunnyPig (bfs)
    openjudge 大师兄,师傅被妖怪抓走啦
    poj 3264 线段树 求区间最大最小值
    bzoj 1012 维护一个单调数列
    poj 1840 暴力+标记
    最短路径(Dijkstra实现)
    最小生成树(Kruskal实现)
    最小生成树(Prim实现)
    拓扑排序(Kahn实现)
    拓扑排序(DFS实现)
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319597.html
Copyright © 2011-2022 走看看