5 条题解

  • 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-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
          标签
          (无)
          递交数
          819
          已通过
          250
          上传者