4 条题解

  • 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

        菜就多练,玩不起就别玩

    • 0
      @ 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
        @ 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
        标签
        (无)
        递交数
        645
        已通过
        199
        上传者