zoukankan      html  css  js  c++  java
  • 巧数之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>
    using namespace std;
    void sort(int a[],int n)
    {
    	int i,j,k,t;
    	for(i=0;i<n-1;i++)
    	{
    		k=i;
    		for(j=i+1;j<n;j++)
    			if(a[j]<a[k])
    				k=j;
    		t=a[k];a[k]=a[i];a[i]=t;
    	}
    }
    
    void sd(int a[],int x)
    {
    	a[0]=x/1000;
    	a[1]=(x%1000)/100;
    	a[2]=(x%100)/10;
    	a[3]=x%10;
    }
    int main()
    {
    	int s,t;
    	int a[4];
    	int x,y;
    	int m;
    	cin>>s;
    	while(s--)
    	{
    		t=1;
    		cin>>m;
    		sd(a,m);
    		sort(a,4);
    		x=a[0]*1+a[1]*10+a[2]*100+a[3]*1000;
    		y=a[0]*1000+a[1]*100+a[2]*10+a[3]*1;
    		while(m!=x-y)
    		{
    			m=x-y;
    			sd(a,m);
    			sort(a,4);
    			x=a[0]*1+a[1]*10+a[2]*100+a[3]*1000;
    			y=a[0]*1000+a[1]*100+a[2]*10+a[3]*1;
    			t++;
    		}
    		cout<<t<<endl;
    	}
    	return 0;
    }
    



  • 相关阅读:
    Docker 安装及使用
    明明白白学 同步、异步、阻塞与非阻塞
    ArrayList 并发操作 ConcurrentModificationException 异常
    shell 脚本防止ddos
    shell 脚本备份数据库
    shell 脚本猜数字
    shell 脚本检测主从状态
    tomcat 结合apache 动静分离
    shell 脚本检测网站存活
    zabbix 4.0 版本 yum安装
  • 原文地址:https://www.cnblogs.com/acmwangpeng/p/5524909.html
Copyright © 2011-2022 走看看