C趣味程序百例(26)卡布列克常数
83.Caprik常量
验证Caprik操作。任何一个四位数,只要其位数不全相同,都有这样一个规律:
1)将组成四位数的四位数字从最大到最小排列,形成由这四位数字组成的四位数;
2)将组成四位数的四个数由小到大排列,形成最小的四位数(如果四位数包含0,则得到的数小于四位数);
3)求两个数之差,得到新的四位数(保留上零)。
重复上述过程,最终结果是6174,称为卡布里卡数。
*问题分析与算法设计
题目给出的过程非常清晰。算法不需要特殊设计,根据题目描述就可以直接验证。
*程序和程序注释
#包含
void VR 6174(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;
void main()
{
int n;
printf("输入一个数字:");
scanf("%d ",& n);/*输入任意正整数*/
VR 6174(n);/*调用函数进行验证*/
}
void VR 6174(int num)
{
int each*运行结果
1)输入一个数字:4312
[1]:4312-1234 = 3078
[2]:8730-378 = 8352
[3]:8532,max,min
if(num!=6174&&num) /*如果不等于74且不等于0,则执行摩羯运算*/
{
parse _ sort (num,each);/*分解整数并将数字存储在每个数组中*/
max_min(each,&max,& min);/*求数字的值和最小值*/
num = max-min;/*评估值与最小值之间的差值*/
printf("[% d]:% d-% d = % d \ n ",++count,max,min,num);/*输出本步骤的计算过程*/
VR 6174(num);/*递归调用自身继续摩羯运算*/
}
void parse _ sort(int num,int * each)
{
int I,* j,* k,temp
for(I = 0;I {
j = each+3-I;
* j = num % 10;
num/= 10;
}
for(I = 0;I for(j =每个,k =每个+1;j if(* j > * k){ temp = * j;* j = * k;* k =温度;}
return;
}
void max _ min(int * each,int * max,int * min)/*将分解后的数还原为整数和最小整数*/
{
int * I;
* min = 0;
for(I = each;I * min = * min * 10+* I;
* max = 0;
for(I = each+3;i > =每个;I-)/*化为整数*/
* max = * max * 10+* I;
退货;
}
[4]
位律师回复
0条评论