卡布列克常数

验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);
3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。


*问题分析与算法设计
题目中给出的处理过程很清楚,算法不需要特殊设计,可按照题目的叙述直接进行验证。


*程序说明与注释

#include <stdio.h>

void vr6174(int);
void parse_sort(int num, int *each);
void max_min(int *each, int *max, int *min);
void parse_sort(int num, int *each);
int count = 0;

int main()
{
    int n;
    printf("Enter a number:");
    scanf("%d", &n); 
    vr6174(n); 
    
    return 0;
}

void vr6174(int num)
{
    int each[4], max, min;
    if (num != 6174 && num)
    {
        parse_sort(num, each); 
        max_min(each, &max, &min); 
        num = max - min; 
        printf("[%d]: %d - %d = %d\n", ++count, max, min, num); 
        vr6174(num); 
    }
}

void parse_sort(int num, int *each)
{
    int i, *j, *k, temp;
    for (i = 0; i <= 4; i++) 
    {
        j = each + 3 - i;
        *j = num % 10;
        num /= 10;
    }
    for (i = 0; i < 3; i++) 
        for (j = each, k = each + 1; j < each + 3 - i; j++, k++)
            if (*j > *k)
            { 
                temp = *j;
                *j = *k;
                * k =temp;
            }
      
}

void max_min(int *each, int *max, int *min) 
{
    int *i;
    *min = 0;
    for (i = each; i < each + 4; i++) 
        *min = *min*10 + *i;
    *max = 0;
     for (i = each + 3; i >= each; i--) 
         *max = *max*10 + *i;

}


1) Enter a number:4312
[1]:4312-1234=3078
[2]:8730-378=8352
[3]:8532-2358=6174
2) Enter a number:8720
[1]:8720-278=8442
[2]:8442-2448=5994
[3]:9954-4599=5355
[4]:5553-3555=1998
[5]:9981-1899=8082
[6]:8820-288=8523
[7]:8532-2358=6174
3)Enter a number:9643
[1]:9643-3469=6174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值