黑洞数(C语言代码实现)
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。
例如,对三位数207:第1次重排求差得:720 - 27 = 693;第2次重排求差得:963 - 369 = 594;第3次重排求差得:954 - 459 = 495;编写程序,实现如下功能:输入一个三位整数,输出将其转换为黑洞数的过程,输入输出格式为:
输入: 207
输出:
1:720-27=693
2:963-369=594
3:954-459=495
C语言代码段如下
编译器:vc++ 6.0
三位黑洞数:495
//三位黑洞数:495
void three_function(int num)
{
int a,b,c,max,min,temp,i=0;
while(num!=495 || i==0)
{
a=num/100;
b=(num%100)/10;
c=num%10;
if(a<b){temp=a;a=b;b=temp;}
if(a<c){temp=a;a=c;c=temp;}
if(b<c){temp=b;b=c;c=temp;}
max=a*100+b*10+c;
min=c*100+b*10+a;
num=max-min;
if(num==0)//三位数字全部相同时,输出一次结果并跳出循环
{
printf("%d:%d - %d = %d\n",++i,max,min,num);
break;
}
else
printf("%d:%d - %d = %d\n",++i,max,min,num);
}
}
四位黑洞数:6174
//四位黑洞数:6174
void four_founction(int num)
{
int max,min,temp,i=0,j;
int a[4];
while(num!=6174 || i==0)
{
a[0]=num/1000;a[1]=(num%1000)/100;a[2]=(num%100)/10;a[3]=num%10;
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
if(a[i]<a[j])
{
temp=a[i];a[i]=a[j];a[j]=temp;
}
i=0;
max=a[0]*1000+a[1]*100+a[2]*10+a[3];
min=a[3]*1000+a[2]*100+a[1]*10+a[0];
num=max-min;
if(num==0)//四位数字全部相同时,输出一次结果并跳出循环
{
printf("%d:%d - %d = %d\n",++i,max,min,num);
break;
}
else
printf("%d:%d - %d = %d\n",++i,max,min,num);
}
}
main函数调用
#include <stdio.h>
main()
{
void three_founction(int num);//函数声明
void four_founction(int num);
printf("三位黑洞数演示:\n");
three_founction(123);// 函数调用
printf("四位黑洞数演示:\n");
four_founction(1234);
}
运行结果
以上为考研C语言编程某真题,@_@
更多推荐
C语言学习-黑洞数(C语言代码实现)
发布评论