蓝桥杯---黑洞数
来源:互联网 发布:dnf自动完成任务软件 编辑:程序博客网 时间:2024/05/10 15:52
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
题目意思很简单,就是找出某个数重新排列之后(最大、最小)差,这样找出一个循环节,这里很好的运用到了排序sort函数
从易到难。。。。。。首先想一个数怎么求循环节,在把五位数的所有情况遍历一下
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;bool cmp(int a,int b){ return a>b;}int main ( ){ int n=10000,a[5]= {0},b[100][20]= {0},num[100]={0},sum= 0 ;//b[][]记录所有输出的序列,num为每个序列的长度,sum为所有满足条件的序列的个数 //count为临时数组的长度 while(n<=99999)//从10000到99999遍历这些数的数字黑洞 { if(n%11111==0){//其中5位数全都相同则循环圈为 [0],这个可以不考虑。n++;continue; } bool mark = 0; int count=0,temp[20]; a[0]=n/10000,a[1]=n/1000%10,a[2]=n/100%10,a[3]=n/10%10,a[4]=n%10; int temp1=0,temp2=0; while(true) { sort(a,a+5); temp1=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4]; sort(a,a+5,cmp); temp2=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4]; temp1=temp2-temp1; for(int i=0;i<sum;i++)//从已经输出的数字黑洞中查找是不是在黑洞中已经有这个数了,如果有这个数,那么肯定就重复了,即便是顺序不一样,由于题目 //说不考虑顺序,所以这个数的数字黑洞就不用找了 for(int j=0;j<num[i];j++) if(temp1==b[i][j]){ //cout<<'*'<<n<<endl; mark=1; } if(mark) break; for(int i=0; i<count; i++)//从当前的临时数列中查找是否出现重复,如果重复了,说明这个已经构成了一个数字黑洞,输出,并加入b[][] if(temp1==temp[i]) { //cout<<n<<':'<<sum<<" "; int xx=0; cout<<'['; for(int j=i; j<count; j++){ cout<<temp[j]; b[sum][xx] = temp[j],xx++; if(j<count-1) cout<<',';} cout<<']'<<endl; mark=1; num[sum]=xx; sum++; break; } if(mark) break; temp[count]=temp1; //如果在已经输出的序列中没有找到这个数,并且这个数在临时的数字黑洞中也没有,就把他加入到临沭的数字黑洞中 count ++; for(int i=4; i>=0; i--) //对产生的新数加入到数组中,用于下一次的使用 { a[i]=temp1%10; temp1/=10; } } n++; } return 0;}
这道题不难,但是实现起来还是有些困难,从这道题目中学到了一点,就是在做题的时候,尤其是对蓝桥杯这样的偏重“暴力”的比赛题目,如果一下遍历思路不好想那就先想一种情况的判断,这样搞清楚一种情况的应对方式,再改成循环,这样题目相对来说会显得简单不少,并且自己也会有信心做下去
0 0
- 蓝桥杯---黑洞数
- 【蓝桥杯练习题】黑洞数
- 蓝桥杯 黑洞数
- 蓝桥杯 黑洞数 解题报告
- 蓝桥杯 5位黑洞数
- 蓝桥杯基础 数论 黑洞数
- 黑洞数
- 黑洞数
- 黑洞数
- 黑洞数
- 2016蓝桥杯假期任务之《黑洞数》
- 黑洞数算法
- 5位黑洞数
- 黑洞数问题
- 求解黑洞数
- 5位黑洞数
- 趣味整数-黑洞数
- 算法练习-黑洞数
- 黑马程序员——OC语言------id和构造方法
- status report 404
- mmap那些事之android property实现
- 王霸梦断慕容家
- 重要线程代码
- 蓝桥杯---黑洞数
- SQLite 在 iOS 中的简单使用(一个小例子)
- 黑马程序员——java中的同步
- 关于界面显示的Windows API函数
- hadoop+eclipse开发环境搭建
- Oracle错误——ORA-03113:通信通道的文件结尾
- class A<T>where T:new()是什么意思
- Headroom.js插件使用方法
- jsp中显示包含html标签等特殊字符的处理方式