南阳理工57---6174问题

6174问题

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到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<stdio.h>
#include<algorithm>
using namespace std;
void fun(int m,int a[])
{
    int count=0;
    while(m>0)
    {
        a[count++]=m%10;
        m=m/10;
    }
    sort(a,a+count);
}
int main()
{
    int n,m;
    int a[100];
    cin>>n;
    while(n--)
    {
        int t=0;
        cin>>m;
        while(1)
        {
            fun(m,a);
            t++;
            m=(a[3]*1000+a[2]*100+a[1]*10+a[0])-(a[0]*1000+a[1]*100+a[2]*10+a[3]);
            if(m==6174)
                break;
        }
        cout<<t+1<<endl;

    }
    return 0;
}

  

时间: 2024-12-28 01:41:09

南阳理工57---6174问题的相关文章

南阳理工 题目9:posters(离散化+线段树)

posters 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally deci

南阳理工另一种阶乘问题

#include<stdio.h>int main(){  int n,m;  int sum,i;  int a[21];  int t=1,t1=1;  for(i=1;i<21;i=i+2)  {   a[i]=t*t1;   a[i+1]=a[i];   t=t1*t;   t1=t1+2;  }  scanf("%d",&n);  while(n--)  {   sum=0;   scanf("%d",&m);   for

南阳理工acm 1

C++版: #include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a+b<<endl; } 南阳理工acm 1,布布扣,bubuko.com

南阳理工--韩信点兵

#include<stdio.h>int main(){  int a,b,c;  int x;  scanf("%d%d%d",&a,&b,&c);  for(x=10;x<=100;x++)  {   if(x%3==a&&x%5==b&&x%7==c)   {    printf("%d\n",x);    break;   }  }  if(x>100)  {   printf(

(c++实现)南阳理工acm 题目117 求逆序数

求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出它的逆序数是多少. 比如 1 3 2 的逆序数就是1. 输入 第一行输入一个整数T表示测试数据的组数(1<=T<=5) 每组测试数据的每一行是一个整数N表示数列中共有N个元素(2〈=N〈=1000000) 随后的一行共有N个整

南阳理工----奋斗的小蜗牛

#include<stdio.h>#include<math.h>int main(){  int t,h;  int n;  double n1;  scanf("%d",&t);  while(t--)  {   n=0;    scanf("%d",&h);    if(h<=10)    printf("%d\n",n+1);   if(h>10)    {  n1=(h-10)/5.0

NYOJ题目57 6174问题

----------------------------------------------------- 感觉这个OJ题目难度划分很不合理,这道理明明很简单却给了2的难度,而之前难度为0的水题有好多难死个人没做出来让我暗暗觉得自己脑子里都是屎... 把题目描述翻译成人话的意思就是多少次以后这个序列会出现,想明白这一点就比较简单了. AC代码: 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main

NYOJ 57 6174问题

啊哈!初次知道6174,还是在高中时,一本科普书上讲的.作为回忆,就把这道题AC了. 水题,不过去掉下面的注释,可以很直观的看到过程. 最后!!!为什么我用memset函数总是忘写#include<cstring>头文件!!! 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作.例如,从1234出发,依次可以得到4321-1234=308

57.6174问题

描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个 数,并且继续操作.例如,从1234出发,依次可以得到4321-1234=3087.8730-378=8352.8532-2358=6174,又回 到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数 比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4 输入 第一行输入n,代表有