东莞做网站有哪些,优客逸家网站源码,外包做网站价格,平台网站做数据维护需要多久6174问题 描述
假设你有一个各位数字互不相同的四位数#xff0c;把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数#xff0c;并且继续操作。例如#xff0c;从1234出发#xff0c;依次可以得4321-12343087、8730-3788352、8532-23586174#… 6174问题
描述
假设你有一个各位数字互不相同的四位数把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数并且继续操作。例如从1234出发依次可以得4321-12343087、8730-3788352、8532-23586174又回到了它自己现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环并且求出操作的次数. 比如输入1234执行顺序是1234-3087-8352-6174-6174,输出是4,
输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4 解析
原本这是一道水题结果被我想多了开始以为直接用数字会比较耗时一直在解决 atoi 、 itoa 函数不能使用的问题将数字与字符串不停地转化结果...超时了(╯﹏╰)浪费了很多时间最后改用在数字上的操作就ok了。 代码如下 #includestdio.hint tran(int m)//计算排序后的数字
{int a[4], i, j, t;a[0] m%10;a[1] m/10%10;a[2] m/100%10;a[3] m/1000;//排序for(i 0; i 4; i)for(j i1; j 4; j)if(a[i] a[j]){t a[i];a[i] a[j];a[j] t;}i a[3]*1000 a[2]*100 a[1]*10 a[0];//小j a[0]*1000 a[1]*100 a[2]*10 a[3];//大return (j-i);
}
int main (void)
{int n, x, count;scanf(%d, n);while(n--){scanf(%d, x);count 1;while(x ! 6174)//计算得到6174的所需次数{x tran(x);count;}printf(%d\n, count);}return 0;
}