3 条题解

  • 1
    @ 2021-5-24 13:43:03

    C++ :

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int maxn(int m);
    int minn(int m);
    int main()
    {
        int n;
        scanf("%d",&n);
        int max1,min1,step=0;
        while(n!=6174){
            max1=maxn(n);
            min1=minn(n);
            n=max1-min1;
            step++;
        }
        printf("%d\n",step);
        return 0;
    }
    
    int maxn(int m)
    {
        int a=m/1000;
        int b=m/100%10;
        int c=m%100/10;
        int d=m%10;
        if(b>a){swap(a,b);}
        if(c>a){swap(a,c);}
        if(d>a){swap(a,d);}
        if(c>b){swap(b,c);}
        if(d>b){swap(b,d);}
        if(d>c){swap(c,d);}
        return a*1000+b*100+c*10+d;
    }
    
    int minn(int m)
    {
        int a=m/1000;
        int b=m/100%10;
        int c=m%100/10;
        int d=m%10;
        if(b<a){swap(a,b);}
        if(c<a){swap(a,c);}
        if(d<a){swap(a,d);}
        if(c<b){swap(b,c);}
        if(d<b){swap(b,d);}
        if(d<c){swap(c,d);}
        return a*1000+b*100+c*10+d;
    }
    
    
    • 0
      @ 2023-4-8 14:47:48
      #include<bits/stdc++.h>
      using namespace std;
      const int N=10;
      int main()
      {
         int s1[N];//正数数
         int s2[N];//反向数
         int s3[N];//不符合条件时正数减反向
         int s4[N];//正着储存a
         string a;
         cin>>a;
         int cnt=1;
         for(int i=1;i<=4;i++)
         {
          s4[i]=a[i-1];
         }
      for(int j=0;;j++)
      {
           sort(s4+1,s4+5);
         for(int i=1;i<=4;i++)
         {
          s1[i]=s4[i];
         }
         for(int i=1;i<=4;i++)
         {
          s2[i]=s4[5-i];
         }
         int o=s1[1]*1000+s1[2]*100+s1[3]*10+s1[4];
         int t=s2[1]*1000+s2[2]*100+s2[3]*10+s2[4];
      if(t-o==6174)
      {
          cout<<cnt;
          break;
      
      }
      else{
          cnt++;
          for(int i=4;i>=1;i--)
          {
              s3[i]=s2[i]-s1[i];
              if(s3[i]<0)
              {
                  s3[i-1]--;
                  s3[i]=s3[i]+10;
              }
      
          }
          for(int i=1;i<=4;i++)
          {
              s4[i]=s3[i];
          }
      }
      }
         
      }
      

      image 原理如图 以4312为例

      • 0
        @ 2022-7-18 19:25:37
        #include<bits/stdc++.h>
        using namespace std;
        bool cmp(int a,int b){
        	return a>b;
        }
        int main()
        {
        	int n,a,b,d[4],sum=0,maxn=0,minn=0;
        	cin>>n;
        	b=n;
        	while(a!=6174)
        	{
        		sum++;
        		for(int i=0;i<4;i++)
        		{
        			d[i]=b%10;
        			b=b/10;
        		}
        		sort(d,d+4,cmp);
        		for(int i=0;i<4;i++)
        		{
        			maxn=maxn*10+d[i];
        		}
        		sort(d,d+4);
        		for(int i=0;i<4;i++)
        		{
        			if(d[i]==0)continue;
        			minn=minn*10+d[i];
        		}
        		a=maxn-minn;
        		b=a;
        		maxn=0;
        		minn=0;
        	}
        	cout<<sum;
        }
        
        • 1

        信息

        ID
        123
        时间
        1000ms
        内存
        128MiB
        难度
        2
        标签
        递交数
        66
        已通过
        43
        上传者