ACM:蓝桥杯:6174问题
2016-06-07 17:27
197 查看
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4
#include<iostream> #include<algorithm> using namespace std; int max(int x,int y,int n) { int aa[4]={0},k=0; while(x)//拆分数字 { aa[k++]=x%10; x=x/10; }//将数组排序 (升序) sort(aa,aa+4); int a=aa[3]*1000+aa[2]*100+aa[1]*10+aa[0]; int b=aa[0]*1000+aa[1]*100+aa[2]*10+aa[3]; int m=a-b; if(m==y) return n+1; max(m,m,n+1); } int main() { int x; cin>>x; while(x--) { int y; cin>>y; cout<<max(y,0,0)<<endl; } }
相关文章推荐
- 各大平台免费接口
- 有假币
- win2008 iis7/iis7.5下最简单最强安装多版本PHP支持环境
- Servlet程序获取http协议提交的信息
- js类的继承
- win10 D盘空间占用太大(内容和标题可能不符,慎入)
- Python 字符串详解
- 解决PKIX:unable to find valid certification path to requested target 的问题
- Qt学习之路(36): Qt容器类之遍历器和隐式数据共享
- TP框架下 xml_encode的用法
- centos 修改host
- [论文阅读]Camera Pose Voting for Large-Scale Image-Based Localization - ICCV2015
- web.xml配置详解
- 轻松几步搞定CocoaPods修复10.11不能安装问题
- Kafka学习整理九(集群的扩容)
- 追MM与设计模式
- 正则表达式集合
- Linux电源管理(11)_Runtime PM之功能描述
- Linux 使用tar打包排除指定目录或文件
- 函数重载