7 条题解

  • 1
    @ 2025-11-27 23:18:13
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int main()
    {
    int a;
    scanf("%d",&a);
    while(a--)
    {
    int b,c,d,e=1;
    scanf("%d",&b);
    while(b!=6174)
    {
    int s[4];
    s[0]=b%10;
    s[1]=b/10%10;
    s[2]=b/100%10;
    s[3]=b/1000;
    sort(s,s+4);
    c=s[3]*1000+s[2]*100+s[1]*10+s[0];
    d=s[0]*1000+s[1]*100+s[2]*10+s[3];
    b=c-d;
    e++;
    }
    printf("%d\n",e);
    }
    return 0;
    }
    
    • 1
      @ 2023-12-12 15:56:19

      #include <stdio.h> int paixu(int num); int paixiao(int num); int main() { int n; scanf("%d",&n); while(n--) { int cum=0; int num,a,b; scanf("%d",&num); while(1) { b=paixu(num); a=paixiao(num); if(a-b==num) { cum++; printf("%d\n",cum); break; } num=a-b; cum++; }

      } return 0;

      } int paixu(int num) { int a[10]; int cont=0,total=1; while(num>0) { a[cont++]=num%10; num/=10; } for(int i=0;i<cont;i++) { for(int j=0;j<cont-1;j++) { int temp; if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;//从小到大排序 } } } for(int i=0;i<cont;i++) { total=total10+a[i]; } return total; } int paixiao(int num) { int a[10]; int cont=0,total=1; while(num>0) { a[cont++]=num%10; num/=10; } for(int i=0;i<cont;i++) { for(int j=0;j<cont-1;j++) { int temp; if(a[j]<a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;//从大到小排序 } } } for(int i=0;i<cont;i++) { total=total10+a[i]; } return total; }

      • 1
        @ 2023-11-18 16:58:52

        #include<stdio.h> int main() { int n,m,a,b,oi[4]; int i,j,count; scanf("%d", &n);

        while(n--) { scanf("%d", &m); count=0; while (m!= 6174) { oi[0] = m / 1000; oi[1] = m / 100 % 10; oi[2] = m / 10 % 10; oi[3] = m % 10; for (i = 0; i < 3; i++) { for (j = 0; j < 3 - i; j++) { if (oi[j] >oi[j + 1]) { int temp; temp = oi[j]; oi[j] = oi[j + 1]; oi[j + 1] = temp; } } } a = oi[3] * 1000 + oi[2] * 100 + oi[1] * 10 + oi[0]; b = oi[0] * 1000 + oi[1] * 100 + oi[2] * 10 + oi[3]; m=a-b; count++; } printf("%d\n", count+1); } return 0;

        }

        • @ 2023-11-19 16:58:58

          菜就多练,玩不起就别玩

      • 1
        @ 2023-9-25 20:33:53
        //经典的数字黑洞问题
        #include<stdio.h>
        int main()
        {
            int c;
            scanf("%d",&c);
            while(c--)
            {
                int a[4];
                int i,j,m,n,t,s,count=0;
                scanf("%d",&s);
                while(s!=6174)
                {
                    a[0]=s/1000;
                    a[1]=s/100%10;
                    a[2]=s/10%10;
                    a[3]=s%10;
                    for(i=0;i<3;i++)
                    {
                        for(j=i+1;j<4;j++)
                        {
                            if(a[j]>a[i])
                            {
                                t=a[j];
                                a[j]=a[i];
                                a[i]=t;
                            }
                        }
                    }
                     m=1000*a[0]+100*a[1]+10*a[2]+a[3];
                     n=1000*a[3]+100*a[2]+10*a[1]+a[0];
                     s=m-n;
                     count++;
                }
                printf("%d\n",count+1);
            }
            return 0;
        }
        
        • 0
          @ 2025-9-22 21:18:03
          #include<stdio.h>
          int main()
          {
              int n,i,a,j,temp,min,max,sum,z;
              char b[5];
              scanf("%d",&n);
              while(n--){
                  sum=0;
                  z=-1;
                  scanf("%d",&a);
                  if(a==6174){
                      printf("1\n");
                      break;
                  }
                  else{
                      while(1){
                      b[0]=a/1000;
                      b[1]=a/100%10;
                      b[2]=a/10%10;
                      b[3]=a%10;
                      for(i=0;i<4;i++){
                          for(j=i+1;j<4;j++){
                              if(b[i]>b[j]){
                                  temp=b[i];
                                  b[i]=b[j];
                                  b[j]=temp;
                          }
                      }
                  }max=b[3]*1000+b[2]*100+b[1]*10+b[0];
                  min=b[0]*1000+b[1]*100+b[2]*10+b[3];
                  a=max-min;
                  sum++;
                  if(a==z){
                      break;
                  }z=a;
                  }printf("%d\n",sum);
                  }   
              }       
              return 0;
          }
          
          • 0
            @ 2025-1-10 20:48:11
            #include<stdio.h>
            #include<iostream>
            #include<algorithm>
            using namespace std;
            const int N=100;
            int f[N];
            int main()
            {
            	int n;
            	cin>>n;
            	while(n--)
            	{
            		int count=0;
            		int m;
            		cin>>m;
            		int q=100;
            		while(q--)
            		{
            			int t=m;
            			int sum=0,sum1=0;
            			f[0]=m%10;
            			f[1]=m/10%10;
            		    f[2]=m/100%10;
            		    f[3]=m/1000%10;
            		    sort(f,f+4);
            		    sum=f[0]+f[1]*10+f[2]*100+f[3]*1000;
            		    sum1=f[0]*1000+f[1]*100+f[2]*10+f[3];
            		    m=sum-sum1;
            		    count++;
            		    if(m==t)
            		    {
            		    	cout<<count<<endl;
            		    	break;
            			}
            		}
            	}
            	return 0;
            }
            真的烦死👀️ 
            
            • 0
              @ 2023-9-12 13:17:01

              避免数位排序的方法:桶排。


              #include <cstdio>
              #include <cstring>
              
              int digit[10];
              
              int process(int m){
                  memset(digit, 0, sizeof(digit));
                  ++ digit[m / 1000];
                  ++ digit[(m % 1000) / 100];
                  ++ digit[(m % 100) / 10];
                  ++ digit[m % 10];
                  int big = 0, small = 0, timer = 1;
                  for(int i = 0; i <= 9; ++ i){
                      while(digit[i]){
                          big += i * timer;
                          small += i * 1000 / timer;
                          timer *= 10;
                          -- digit[i];
                      }
                  }
                  return big - small;
              }
              
              int main(){
                  int n, i;
                  int num, cnt = 0;
                  scanf("%d", &n);
                  for(i = 1; i <= n; ++ i){
                      scanf("%d", &num);
                      while(num != 6174){
                          num = process(num);
                          ++ cnt;
                      }
                      printf("%d\n", cnt + 1);
                      cnt = 0;
                  }
              }
              
              • 1

              信息

              ID
              140
              时间
              1000ms
              内存
              128MiB
              难度
              6
              标签
              (无)
              递交数
              1004
              已通过
              303
              上传者