循环圈
来源:互联网 发布:海岛奇兵升多管数据 编辑:程序博客网 时间:2024/05/16 01:16
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962,75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
#include <iostream>#include<cstring>#include<algorithm>using namespace std;int a[100];int count1=0;int bj;int off(int n,int t)//t==0求最小值t==1求最大值{ int num[5]; memset(num,0,sizeof(num)); int k=0; while(n) { num[k]=n%10; n=n/10; k++; } sort(num,num+5); int max=0,min=0; if(t==0)//返回最小值 { min=num[4]+num[3]*10+num[2]*100+num[1]*1000+num[0]*10000; return min; } else//返回最大值 { max=num[0]+num[1]*10+num[2]*100+num[3]*1000+num[4]*10000; return max; }}bool check(int ch)//检查{ for(int i=0; i<count1; i++) { if(a[i]==ch) { bj=i; return true; } } return false;}void f(int n)//计算{ int max=off(n,1); int min=off(n,0); int ch=max-min; if(check(ch)) return; else { a[count1]=ch; count1++; f(ch); }}int main(){ int n; cin>>n; memset(a,0,sizeof(0)); f(n); //输出 cout<<"["; for(int i=bj; i<count1; i++) { cout<<a[i]; if(i!=count1-1) cout<<","; } cout<<"]"; cout<<endl; return 0;}
0 0
- 循环圈
- 最小套圈问题双重循环算法
- 5位循环圈(黑洞数)
- 圈
- 循环队列实现站圈出列(垃圾版)
- 【思考】你为什么总是陷入老鼠赛跑的循环圈?
- 找出小于1000的数字中令1/d拥有最长循环圈的数字d。
- 循环链表解决出圈问题java代码(已调试)
- 深圳消费电子圈的一个无奈的死循环现象
- UVA - 11549 Calculator Conundrum (循环节)(Floyd判圈算法,快慢指针)
- 圈存&圈提
- 圈存&圈提
- C:m围圈报数,报到n的人出列,循环报数,求最后剩的那个人
- 娱乐“圈”
- 转圈圈
- 品质圈
- 白眼圈
- 圈复杂度
- 微信获取用户信息的两个接口和两个ACCESS_TOKEN
- 技术网站
- ((((((((BFS))))Aoj0558
- git安装及关联远程仓库
- unity 通过使用 photon networking Pun 实现 HTC Vive VR的多人联网。进阶版 《三》
- 循环圈
- MySql5.6Window超详细安装教程
- 产生死锁的必要条件
- horizontalscollview实现今日头条首页动态改变tab
- POJ 2442 Sequence (堆)
- 特征检测:白话Harris角点检测
- Debian8下muduo库编译与使用
- Android编译系统环境初始化过程分析
- 鸡兔同笼问题