4 条题解
-
1
#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
#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;
}
-
0
//经典的数字黑洞问题 #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
避免数位排序的方法:桶排。
#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
- 上传者