求解黑洞数

问题描写:

黑洞数又称圈套数,是类具有奇特转换特性的整数。任何1个数字不全相同的整数,
经有限“重排求差”操作,总会得到某1个或1些数,这些数即为黑洞数。
“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。
举个例子,3位数的黑洞数为495.

简易推导进程:随意找个数,如297,3个位上的数从小到大和从大到小各排1次,
为972和279,相减得693。按上面做法再做1次,得到594,再做1次,得到495,
以后反复都得到495。

验证4位数的黑洞数为6174。

解题思路:


#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
#define LENTH 100
/* 降序:冒泡排序 */
void dec_sort(int array[],int n)
{
int flag = 0;
for(int i=0;i<n⑴;++i)//n⑴趟排序
{
for(int j=0;j<n-i⑴;++j)//第i趟比较n-i次,由于i从0开始,所以还得⑴
{
if(array[j] < array[j+1])
{
array[j] += array[j+1];//array[j] = array[j] + array[j+1]
array[j+1] = array[j] – array[j+1];
array[j] -= array[j+1];//array[j] = array[j] – array[j+1]
flag = 1;
}
}
if(flag == 0)//在1趟排序中若未产生交换,表明已排序好,退出程序
break;
}
}
/* 升序:选择排序 */
void inc_sort(int array[],int n)
{
int k;
for(int i=0;i<n⑴;++i)//n个数,将前n⑴个数放置好就结束了
{
k = i;//假定要排序的1组数据中第1个数最小(k寄存待排序数据中最小值的下标)
for(int j=k+1;j<n;++j)
{
if(array[j] < array[k])//若存在比当前值还小的数,则交换下标
{
k = j;
}
}
if(k != i)
{
array[i] += array[k];
array[k] = array[i] – array[k];
array[i] -= array[k];
}
}
}
int black_hole_num(int n)
{
cout<<n<<endl;
//注意:!!!求解进程中会改变n的值,而下面要用到n,不想它改变
//所以用临时变量保存他的值,改变临时变量,而不改变它
int temp = n;
int array[LENTH];
int i = 0;
int count;
int max = 0;
int min = 0;
/* 将该数值的各个位寄存在数组中 */
while(temp)
{
array[i] = temp%10;
i++;
temp /= 10;
}
count = i;
/* 元素升序以后,求解最小值*/
inc_sort(array,count);
for(i=0;i<count;++i)
{
min = min*10 + array[i];
}
/* 元素降序以后,求解最大值*/
dec_sort(array,count);
for(i=0;i<count;++i)
{
max = max*10 + array[i];
}

/* if(max – min == n)//此处要用到n的值,所以改变临时变量而不改变n
return n;
else
return black_hole_num(max – min);*/
return (max – min == n) ? n:black_hole_num(max – min);
}
int main()
{
int flag = 1;
int n;
int num;
system("mode con cols=100 lines=100");
system("color 0A");
while(flag)
{
cout<<"———-求解黑洞数————-"<<endl;
cout<<" zyh_helen"<<endl;
cout<<"请输入您要求的黑洞数的位数:"<<endl;
cin>>n;
cout<<"请输入"<<n<<"个:任何1个数字不全相同的整数"<<endl;
cin>>num;
cout<<"黑洞数为:"<<black_hole_num(num)<<endl;
cout<<"continue:1 break:0"<<endl;
cin>>flag;
}
return 0;
}

当输入5的时候,会堕入[82962,75933,63954,61974]循环圈中


<span style="color:#ff0000;">任何1个数字不全相同的整数,
经有限“重排求差”操作,总会得到某1个或</span><span style="color:#3333ff;">1些数</span><span style="color:#ff0000;">,这些数即为黑洞数。</span>

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 求解黑洞数

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡