本文主要是介绍Tsukinai的第三十一个程序(卡布列克运算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Tsukinai的第三十一个程序
*验证卡布列克运算。即:任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);
(3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果总是6174。这个数被称为卡布列克常数。请编写一个递归函数,完成以上的卡布列克运算。
**输入格式要求:"%d" 提示信息:“Enter number:”
**输出格式要求:" [%d]:%d-%d=%d\n"
程序运行示例如下:
Enter number: 1234
[1]:4321-1234=3087
[2]:8730-378=8352
[3]:8532-2358=6174
#include <stdio.h>
#include <stdlib.h>
int count = 1;
void Kabrek(int n);
int main()
{int n;printf("Enter number:");scanf("%d", &n);Kabrek(n);system("pause");return 0;
}
void Kabrek(int n)
{int a[4], i, j, temp, max, min;for (i = 3; i >= 0; i--){a[i] = n % 10;n /= 10;}for (j = 3; j > 0; j--){for (i = 0; i < 3; i++){if (a[i] > a[i + 1]){temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;}}}max = 1000 * a[3] + 100 * a[2] + 10 * a[1] + a[0];min = 1000 * a[0] + 100 * a[1] + 10 * a[2] + a[3];if (max - min != 6174){printf(" [%d]:%d-%d=%d\n", count, max, min, max - min);count++;Kabrek(max - min);}elseprintf(" [%d]:%d-%d=%d\n", count, max, min, max - min);
}
这篇关于Tsukinai的第三十一个程序(卡布列克运算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!