- 输入一个各位不全相等<10000的数;
- 输入要判断几位数的黑洞数(3或4);
- 把各位数从大到小排列重新形成一个数a,从小到大排列重新形成一个数b;
- 用a减去b得到的一个新的数c(不足位,首位补0);
- 把新的数c按照步骤2,3处理得到数d,判断c,d是否相同:若不同,继续上述操作;若相同,则结束。(其他位数的话可能找不到黑洞数,一直循环,所以就做了计数100次后退出循环)
#include<iostream>
#include<math.h>
using namespace std;
int *qwsz(int number, int size)
{
int i;
static int a[10];
for(i = 0; i < size; i++)
{
a[i] = number % 10;
number /= 10;
}
return a;
}
int sort(int a[], int size, char c)
{
int temp, resort = 0;
int i, j;
switch(c)
{
case 'b':
{
for(i = 0; i < size; i++)
for(j = 0; j < size - 1 - i; j++)
{
if(a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
for(i = 0; i < size; i++)
{
resort = resort + a[i] *pow(10, size - 1 - i);
}
return resort;
}
case 's':
{
for(i = 0; i < size; i++)
for(j = 0; j < size - 1 - i; j++)
{
if(a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
for(i = 0; i < size; i++)
{
resort = resort + a[i] *pow(10, size - 1 - i);
}
return resort;
}
}
}
int main()
{
int n, _resort, flag, _new, m;
int *p, number = 0;
cout << "输入一个各位数不全一样的数(<10000):\n";
cin >> n;
cout << "输入要找的位数(3或4):" << endl;
cin >> m;
p = qwsz(n, m);
cout << "新重组数Big: " << sort(p, m, 'b') << endl;
cout << "新重组数Small:" << sort(p, m, 's') << endl;
_resort = sort(p, m, 'b') - sort(p, m, 's');
cout << "重组数之差: " << _resort << endl;
number++;
while(flag)
{
p = qwsz(_resort, m);
cout << "新重组数Big: " << sort(p, m, 'b') << endl;
cout << "新重组数Small:" << sort(p, m, 's') << endl;
_new = sort(p, m, 'b') - sort(p, m, 's');
cout << "重组数之差: " << _new << endl;
if(_new != _resort)
{
_resort = _new;
flag = 1;
}
else
flag = 0;
number++;
if(number > 99)
break;
}
cout << "重组计算次数:" << number << endl;
return 0;
}
注:刚学C++,写这个程序写着玩,有错误之处,望指正。