zoukankan      html  css  js  c++  java
  • 2017.10.22

      

    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>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */

    int main(int argc, char** argv)
    {
    int n;
    int num;
    int array[4];
    int max=0;;
    int min=0;
    int dif=0;
    int count=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    scanf("%d",&num);
    while(num!=6174)
    {
    count++; //用于计数
    array[0]=num/1000; //分解个十百千位
    array[1]=num/100%10;
    array[2]=num%100/10;
    array[3]=num%10;
    for(int j=1;j<4;j++) //用插入法从小到大排序
    {
    int temp=array[j];
    int k=j-1;
    while(k>=0&&array[k]>temp)
    {
    array[k+1]=array[k];
    k--;
    }
    array[k+1]=temp;
    }
    max=array[0]+array[1]*10+array[2]*100+array[3]*1000;
    min=array[0]*1000+array[1]*100+array[2]*10+array[3];
    dif=max-min;
    num=dif;
    }
    printf("%d ",count+1);
    }
    return 0;
    }

    
    
  • 相关阅读:
    java实现冒泡排序
    使用telnet测试指定端口的连通性
    聊聊Java中的异常及处理
    Java工具类——数学相关的类
    谈谈javaSE中的==和equals的联系与区别
    如何在Vim中更改颜色和主题
    配置类为什么要添加@Configuration注解呢?
    你知道Spring是怎么解析配置类的吗?
    读源码,我们可以从第一行读起
    Spring杂谈 | Spring中的AutowireCandidateResolver
  • 原文地址:https://www.cnblogs.com/panlangen/p/7710085.html
Copyright © 2011-2022 走看看