zoukankan      html  css  js  c++  java
  • 6174问题 分类: 算法入门 算法 2014-10-25 14:15 80人阅读 评论(0) 收藏

    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<stdio.h>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    
    bool cmp(int x,int y)
    {
    	return x>y;
    
    }
    
    int main()
    {
    	int m,n,i,j,num,numc,numa,numb,count;
    	char a[5],b[5];
    	scanf("%d",&n);
    	while(n--)
    	{
    		count=0;
    		scanf("%s",a);
    		do{
    		count++;
    		num=1000*(a[0]-'0')+100*(a[1]-'0')+10*(a[2]-'0')+(a[3]-'0');
    //		printf("num=%d,count=%d",num,count);
    		strcpy(b,a);
    		sort(a,a+4);
    		sort(b,b+4,cmp);
    		numa=1000*(a[0]-'0')+100*(a[1]-'0')+10*(a[2]-'0')+(a[3]-'0');
    		numb=1000*(b[0]-'0')+100*(b[1]-'0')+10*(b[2]-'0')+(b[3]-'0');
    		numc=numb-numa;
    //		printf("num=%d numb=%d numc=%d
    ",numa,numb,numc);
    		for(i=3;i>=0;i--)
    		{
    			a[i]=numc%10+'0';
    			numc=numc/10;
    		}
    	
    		}while((numb-numa)!=num);
    		printf("%d
    ",count);
    		
    
    
    	
    	}
    	return 0;
    
    	
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    ObjectC&&Swift 渐变色算法实现
    【iOS数据存储】iOS文件系统介绍
    1 、Quartz 2D绘图基础
    iOS 常用框架列表
    【Foundation Frame】Struct
    【Foundation Frame】NSMutableArray
    【Foundation Frame】NSDictionary/NSMutableDictionary
    【Foundation Frame】NSString
    【Foundation Frame】NSArray
    在vue项目中使用自己封装的ajax
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656998.html
Copyright © 2011-2022 走看看