0分求助,思路大体相同
查看原帖
0分求助,思路大体相同
588744
ww_newhand楼主2023/9/15 15:36
#include<iostream>
using namespace std;
long long n;
int a[10],b[10];//记录n各个位数上的值
long long c[1001];
#include<map>
map<long long, bool>m;
int main()
{
	while (cin >> n)
	{
		int j = 0, num = n;
		for(;;j++)
		{
			memset(a, 0, sizeof(a));//每次输入初始化为0
			int y=0;
			while (num!= 0)
			{
				y = num % 10;
				num /= 10;
				a[y]++;
				b[y]++;
			}
			int maxn = 0, minn = 0;
			for (int i = 9; i >= 0; i--)//记录最大值
			{
				while (a[i])
				{
					maxn =maxn*10+i;
					a[i]--;
				}
			}
			for (int i = 0; i < 10; i++)//记录最小值
			{
				while (b[i])
				{
					minn = minn * 10 + i;
					b[i]--;
				}
			}
			//cout << maxn << " pp " << minn << endl;
			num = maxn - minn;
			c[j] = num;
			if (m[num])break;//之前出现过相同的差值
			else m[num] = 1;
		}
		bool flag1 = 0;
		for (int i = 0;i<j;i++)
		{
			if (c[i] == c[j])flag1 = 1;
			if (flag1)cout << c[i] << " ";
		}
	}
	system("pause");
	return 0;
}
2023/9/15 15:36
加载中...