C/C++黑洞陷阱(Kaprekar问题)

495是一个很神奇的数,被称为黑洞数或者陷阱数

任务描述:

给定任何一个小于1000的正整数,经前位补0后可以得到一个三位数(两位数前面补1个0,一位数前面补2个0。如果这个三位数的三个数字不全相等,那么经过有限次“重排求差”操作(组成该数的数字重排后的最大数减去重排后的最小数),总会得到495,神奇吧

例如:

对于整数80,看看怎么得到495吧!

1.1:800-8=792  //第一次重排后求差(将80重排)
2.2:972-279=693    //第二次,将第一次的结果重排求差
3.3:963-369=594  //第三次,将第二次的结果进行重排求差

4.4:954-459=495   //将上次的结果进行重排求差

具体代码如下:

#include<stdio.h>
int main()
{
	int count = 0;
	int a, b, c, n,tmp,max,min;
	scanf_s("%d", &n);
	if (n < 1000)
	{
		while (n != 495)
		{
			a = n % 10;
			b = n / 10 % 10;
			c = n / 100;
			while (a != b||a != c)
			{
				if (a < b)
				{
					tmp = a;
					a = b;
					b = tmp;
				}
				if (a < c)
				{
					tmp = a;
					a = c;
					c = tmp;
				}
				if (b < c)
				{
					tmp = b;
					b = c;
					c = tmp;
				}
				break;
			}
			max = a * 100 + b * 10 + c;
			min = c * 100 + b * 10 + a;
			n = max - min;
			count++;
			printf("%d:%d-%d=%d\n", count, max, min, n);
		}
	}
	return 0;
}

        

结果如下:

如有问题请指正。

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值