黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。
任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)
例如,对三位数207:
第1次重排求差得:720 – 27 = 693;
第2次重排求差得:963 – 369 = 594;
第3次重排求差得:954 – 459 = 495;
以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。
任意输入一个三位数,编程给出重排求差的过程。
#include <stdio.h>
int test(char arr[] )
{
int i = 0;
int j = 0;
int num1 = 0;
int num2 = 0;
char temp = ”;
for( i = 0 ; i < 2 ; i++) 对字符数组排序
{
for( j = 0 ; j < 3 – i – 1 ;j++)
{
if( arr[j] > arr[j+1] )
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
num1 = arr[0]-‘0’ + ( arr[1] – ‘0’ ) * 10 + ( arr[2] – ‘0’ ) *100 ;
num2 = arr[2]-‘0’ + ( arr[1] – ‘0’ ) * 10 + ( arr[0] – ‘0’ ) *100 ;
printf(“%d – %d = %dn”,num1,num2,num1-num2);
arr[0] = (char)((num1-num2)/100)+‘0’; 对 num1 – num2 处理成新的数组
arr[1] = (char)(((num1-num2)/10)%10)+‘0’;
arr[2] = (char)((num1-num2)%10)+‘0’;
return num1-num2;
}
int main()
{
char arr[4] = { ”};
scanf(“%s”,arr); 接收三位数
while( 1 )
{
if( test(arr) == 495 )
{
return 0;
}
}
return 0;
}
原文地址:https://blog.csdn.net/wx20041102/article/details/135555442
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_57308.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!