【刷题小记57】6174问题
来源:互联网 发布:linux下查看path 编辑:程序博客网 时间:2024/06/01 10:47
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
- 输入
- 第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数 - 输出
经过多少次上面描述的操作才能出现循环
#include <stdio.h>#include <stdlib.h>int reverse(int n,int count){count++;int t=n;int arr[4]; int i,j; int temp; for(i=0;i<4;i++) {arr[i]=t%10; t=t/10; } for(i=0;i<4;i++) //arr[0]<arr[1]<arr[2]<arr[3] for(j=i+1;j<4;j++) {if(arr[i]>arr[j]) {temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } //abc最大 cba最小 int abc=arr[3]*1000+arr[2]*100+arr[1]*10+arr[0]; int cba=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3]; if((abc-cba)==n) {return count; }else {return reverse(abc-cba,count); }}int main(){int p=0; int n; int Cases; scanf("%d",&Cases); while(Cases--) {int p=0;scanf("%d",&n);printf("%d\n",reverse(n,p)); }return 0;}
0 0
- 【刷题小记57】6174问题
- 【刷题小记22】素数求和问题
- 【刷题小记97】兄弟郊游问题
- 【刷题小记77】开灯问题
- 【刷题小记29】求转置矩阵问题
- 【刷题小记3】括号配对问题
- 问题小记
- 问题小记
- 刷题小记
- LeetCode刷题小记
- 刷题小记
- 【刷题小记34】韩信点兵
- 【刷题小记66】分拆数
- 【刷题小记72】财务管理
- 【刷题小记198】数数
- JBoss初学问题小记
- 小记:大小端问题!
- ssh问题小记
- SDUT 1591-交叉排序(Arrays.sort)
- Android开发实战1----第一次启动软件 引导页面
- 2014年百度研发笔试算法题1解法
- 角落中的C语言
- 移动应用架构-C/S架构
- 【刷题小记57】6174问题
- 【DP】 HDOJ A simple greedy problem.
- 面向对象程序设计上机练习三(有默认参数的函数)
- hdu 1827 强连通分量+判断入度
- HDU 4286 Data Handler(伸展树)
- C#调用易语言写的Dll文件
- cocos2d-x学习笔记————HelloWorld
- C#使用jsonp进行跨域提交表单
- 50个创意进度条优秀设计(附PSD下载)