C语言——黑洞数

题目概述:

存在一种黑洞数:任何一个数字不完全相同的整数,经有限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。例如:三位数的黑洞数为495;四位数的黑洞数是6174.任取一个数字不完全相同的三位数,如 297 ,将其个位,十位,百位的数字从大到小和从小到大分别排一次,为972和279,两数相减,得693,重复上述过程,得594;再次重复计算可得495.

写一个函数,求出一个三位数经过几次运算掉入黑洞,函数原型为:

int trapnum(int x);

返回值为计算次数,x为任意三位整数;

main函数中输入整数x,测试trapnum函数,输出不同结果,如:

输入:297

输出:

297->693->594->495

3ops

输入:111

输出:

error!

0ops

#include

int trapnum(int x)
{
	int i, num1[3] = { 0 }, num2[3] = { 0 }, temp = 0, cnt = 0, time[200] = { 0 };
	time[0] = x;
	if (x == 495)
		return 0;
	else 
	{
		do
		{
			num1[0] = int(x / 100);
			num1[1] = int((x - num1[0] * 100) / 10);
			num1[2] = int((x - num1[0] * 100 - num1[1] * 10));
			if (num1[0] == num1[1] && num1[1] == num1[2])
			{
				return -1;
			}
			if (num1[0] < num1[1])
			{
				temp = num1[0];
				num1[0] = num1[1];
				num1[1] = temp;
			}
			if (num1[1] < num1[2])
			{
				temp = num1[1];
				num1[1] = num1[2];
				num1[2] = temp;
			}
			if (num1[0] < num1[2])
			{
				temp = num1[0];
				num1[0] = num1[2];
				num1[2] = temp;
			}
			for (i = 0; i < 3; i++)
			{
				num2[2 - i] = num1[i];
			}
			x = (100 * num1[0] + 10 * num1[1] + num1[2]) - (100 * num2[0] + 10 * num2[1] + num2[2]);
			cnt++;
			time[cnt] = x;
		} while (x != 495);
		return cnt;
	}
}

int main()
{
	int num, count, time[200] = { 0 },i;
	printf("Please enter the number:");
	scanf_s("%d", &num);
	count=trapnum(num);
	if (count == -1)
	{
		printf("error!\n");
		count = 0;
	}
	printf("The times of calculation are:%d", count);
	for (i = 0; time[i] != '\0'; i++)
		printf("%d->", time[i]);
	return 0;
}

你可能感兴趣的:(c语言,开发语言,后端)