c语言编辑程序问题1

验证命题:任何各位数字不全相同的3位正整数经以下变换后均能变为495,称495为3位整数的黑洞数。
变换步骤:对于任意—个各位数字不全相同的3位工整数,将组成该正整数的3个数字重新组合分别生成一个最大数和一个最小数,用最大数减去最小数得到一个新的了位数;再对新的3位数重复上述操作,最多重复7次。
编写程序,接收键盘输入的一个3位正整数,判断各位数字是否不全相同,若不全相同则实施以上变换(不超过7次),输出每步变换后得到的3位整数。

供参考,谢谢!

img

img

img

#include <stdio.h>
int func1(int n);
int func2(int n);
int main(int argc, char *argv[])
{
    int n, t;
    scanf("%d", &n);
    if (!func1(n))
    {
        printf("%d不是黑洞数!\n", n);
        getchar();
        return -1;
    }

    t = n;
    for (int i = 0; i < 7 && t != 495; i++)
    {
        t = fun2(t);
        printf("%d\n", t);
    }

    return 0;
}

/*判断一个三位数是否不全相同
*/
int func1(int n)
{
    if (n < 100 || n > 999)
        return 0;
    int a, b, c;
    a = n % 10;
    b = n / 100;
    c = n / 10 % 10;
    if (!(a == b && b == c))
        return 1;
    return 0;
}

//生成新的数
int fun2(int n)
{
    int a[3], t;
    a[0] = n % 10;
    a[1] = n / 100;
    a[2] = n / 10 % 10;
    for (int i = 0; i < 2; i++)
    {
        for (int j = i + 1; j < 3; j++)
        {
            if (a[i] > a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }

    return a[2] * 100 + a[1] * 10 + a[0] - (a[2] + a[1] * 10 + 100 * a[0]);
}

供参考:

#include <stdio.h>
int max (int a,int b,int c);
int min (int a,int b,int c);
int middle (int a,int b,int c);
int main()
{
    int  a,b,c,p,q,n;
    printf("Please input n:");
    scanf("%d",&n);
    while (n!=495)
    {
        a=n/100; b=n%100/10; c=n%10;
        p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
        q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
        n=p-q;
        printf("%d\n",n);
    }
    return 0;
}
int max(int a,int b,int c)
{
    return  a > b ? a > c ? a : c : b > c ? b : c;
}
int min(int a,int b,int c)
{
    return  a < b ? a < c ? a : c : b < c ? b : c;
}
int middle(int a,int b,int c)
{
    int maxx = max(a,b,c);
    int minn = min(a,b,c);
    if (a < maxx && a > minn)
        return a;
    if (b < maxx && b > minn)
        return b;
    if (c < maxx && c > minn)
        return c;
}