任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。要求编写程序,找到5位数所有可能的循环圈,并输出。

这是某个比赛中的一个问题,我试着用c语言求了一下。大概思路就是:把五位数拆分,排序,求最大和最小数,求差,再判断是否落入了黑洞数的循环。

/****************************************

输出5位数的全部黑洞数

*****************************************/#include

int Max_Min(intnum);void Find(intnum);int c[20]={0},k=0; //这两个全局变量是为了查重

voidmain()

{intnum;for(num=10000;num<99999;num++)

{

Find(num);

}

}/**********************************

函数名称:Max_Min

函数功能:把一个五位数的各位提取出来,

重新组合成最大数和最小数,并求差

参数:num--输入的五位数

返回值:sub_result--最大数与最小数的差

***********************************/

int Max_Min(intnum)

{char i=0,j=0,t;int max=0,min=0,sub_result;char a[5];for(i=0;i<5;i++) //把各位数取出来,不足5位的补0

{

a[i]=num%10;

num=num/10;

}for(i=0;i<=3;i++) //从大到小排序

for(j=0;j<=3-i;j++)

{if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}for(i=0;i<=4;i++)

{

max=max*10+a[i]; //组成的最大的数

}for(i=4;i>=0;i--)

{

min=min*10+a[i]; //组成的最小的数

}

sub_result=max-min; //求差

returnsub_result;

}/*********************************

函数名称:Find

函数功能:判断输入的数是否有黑洞数,并输出

参数:num--输入的五位数

**********************************/

void Find(intnum)

{char i,j,m,flag=0;int b[100];

b[0]=Max_Min(num);for(i=1;i<100;i++) //测试前100个

{

b[i]=Max_Min(b[i-1]);for(j=0;j

{if(b[j]==b[i])

{

flag=1;for(m=0;m<20;m++) //查看前面是否已经输出过

{if(b[j]==c[m])

{

flag=0;break;

}

}break;

}

}if(flag==1) //存在黑洞数并且前面没有输出过

{

printf("%c",'[');for(;j

{

printf("%d%c",b[j],',');

c[k++]=b[j];

}

printf("%d",b[j]);

c[k++]=b[j];

printf("%c",']');

printf("\n");return;

}

}

}

这段程序很多不足之处,比如在对最大和最小数求差的时候,只求了100次,当然算出来结果也是对的,因为五位数的黑洞数都能在100次之内被检测出来,其实实际情况远远用不了100次。结果虽然对,但思路总归不严谨。下面给出一个用递归法求解的。

#include

int Max_Min(intnum);void Find(intnum);int record1[50]={0},k=0; //这两个全局变量是为了查重

int record2[100],f; //每次使用前清零

voidmain()

{intnum;charm;for(num=10000;num<=99999;num++)

{

Find(num);for(m=0;m<100;m++) //由于是全局变量,在本次使用后清零

{

record2[m]=0;

}

f=0;

}

}/**********************************

函数名称:Max_Min

函数功能:把一个五位数的各位提取出来,

重新组合成最大数和最小数,并求差

参数:num--输入的五位数

返回值:sub_result--最大数与最小数的差

***********************************/

int Max_Min(intnum)

{char i=0,j=0,t;int max=0,min=0,sub_result;char a[5];for(i=0;i<5;i++) //把各位数取出来,不足5位的补0

{

a[i]=num%10;

num=num/10;

}for(i=0;i<=3;i++) //从大到小排序,冒泡法排序

for(j=0;j<=3-i;j++)

{if(a[j]

5位数的数字黑洞是多少_数字黑洞求解问题相关推荐

  1. 15数字华容道解法 图解_数字华容道攻略(数字华容道最快解法图)

    数字华容道有何解法? 4*4基本在一分钟左右,最快一次32秒.5*5.6*6还没测.4*4太简单,我就简单说一下了,后面5*5和6*6比较详细.4*4: 首先还原前两行.然后把9到12按下图...下面 ...

  2. 15数字华容道解法 图解_数字华容道最后一行技巧数字华容道教学步骤

    数字华容道最后一行技巧是先把上一排的按顺序往下转,上一排不要打乱,当把最后一排的数字转上一部分去时,找准顺序插下来,一直转到最后一排的顺序也是正确的,再复原就可以了.数字华容道就是将1-15这15个数 ...

  3. 15数字华容道解法 图解_数字华容道最后一行技巧 数字华容道教学步骤

    数字华容道最后一行技巧是先把上一排的按顺序往下转,上一排不要打乱,当把最后一排的数字转上一部分去时,找准顺序插下来,一直转到最后一排的顺序也是正确的,再复原就可以了.数字华容道就是将1-15这15个数 ...

  4. mysql金额数字转成中文_数字转换成汉字金额(转)

    1 2 3 //测试工程4 5 staticvoidMain(string[] args)6 7 {8 9 Console.WriteLine("请输入金额");10 11 str ...

  5. 数字图像处理 采样定理_数字图像处理基础知识总结

    第 1 页 第一章 数字图像处理概论 * 图像 是对客观存在对象的一种相似性的.生动性的描述或写真. * 模拟图像 空间坐标和明暗程度都是连续变化的.计算机无法直接处理的图像 * 数字图像 空间坐标和 ...

  6. 15数字华容道解法 图解_数字华容道最后一行怎么解 最后一道解答技巧

    数字华容道的基本解法思路就如同魔方解法-样,下面开始教学步骤,先对第一排,将1.2.3一个个移到目标位置,这一步不需要什么技巧,只管将三个数字-个一个移就行,其它数字不用管. 在移数字4时先移到目标位 ...

  7. mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)

    数字金额大写转换(可以处理整数,小数,负数) 代码 //数字金额大写转换 function upDigit(n) { var fraction = ['角', '分']; var digit = [' ...

  8. 15数字华容道解法 图解_数字华容道解法图解 数字华容道玩法介绍

    数字华容道,一款全新的经典的益智类型数字APP.目的是用最少的步数,*短时间将棋盘上的数字方块,按照从左到右,从上到下的顺序重新排列整齐.以往华容道游戏基于三国背景,需将棋子移动到出口.现在以数字为形 ...

  9. 数字推盘游戏java_数字推盘游戏下载_数字推盘最强大脑app游戏下载最新版 v1.0-安族游戏网...

    数字推盘游戏是一款让千万玩家们都为之沉迷的华容道数字解谜闯关类小游戏.在这个让人感受到真实互动的挑战模式之中,玩家们可以发挥自己的无限想象能力.空间推理能力以及你的聪明脑力开始你的数字挑战赛.简约清新 ...

  10. 15数字华容道解法 图解_数字华容道有何解法?

    有通法的.任意n阶数字推盘都有通法,而且不难. 以4阶数字推盘为例,复原分为3个阶段 第一阶段:复原前两行(n阶推盘为前n-2行) 第二阶段:将后两行排列为如下形式 第三阶段:全部复原 将推盘各位置命 ...

最新文章

  1. pylons中常用的paster命令
  2. div居中与div内容居中,不一样
  3. 第四周实践项目4 建立算法库——双链表
  4. 关于mobiscroll插件的使用
  5. Java中关于省略作用域报错问题分析
  6. mongodb3 重启_手机卡顿反应慢?OPPOR9splus重启找回“新机”手感_
  7. r-cnn学习(六):RPN及AnchorTargetLayer学习
  8. 50 岁再次创业:我希望 20 年后还能解 Bug
  9. java子字符串查找位置_初学者求教,如何在字符串中查找多个子字符串的位置...
  10. RNN Attention
  11. 独家对话阿里巴巴副总裁华先胜: 基础科研的突破,是大浪的源头
  12. 关于Windows 10 企业版 LTSC重装系统后优化项目
  13. Pyltp的安装使用笔记
  14. 任天堂如何通过旧技术赢得胜利
  15. 美团旅行销售绩效系统研发实践
  16. REINFORCE和Reparameterization Trick
  17. [学习笔记]opencv双线性插值法图像放大
  18. IKEv2子网之间秘钥重协商
  19. 苹果手机计算机怎样拉到桌面,20个你应该知道的iPhone 7实用小技巧
  20. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...

热门文章

  1. 数字金额转化为大写金额(js)
  2. 谈谈EMC Unity名字侵权官司,送竞争分析点评
  3. 短信平台系统 后台功能简介 网页版短信通道介绍 短信平台源代码搭建
  4. Go语言-复合数据结构(map)
  5. wamp mysql_wamp中如何打开mysql
  6. 以聚合数据为例,详细说明API接口使用方法
  7. 掌握如何使用Rose绘制活动图的方法
  8. linux windows 剪辑,LosslessCut-超快速、好用、不破坏画质又免安装的免费影片剪辑工具 (Windows/Mac/Linux)...
  9. 技术小白之微信小程序的图片加文字链接
  10. 华为手机2.3亿出货量背后,一场技术+市场的胜利