C语言 6174 求大神
描述:
任取一个四位数A1、A2、A3、A4, A1、A2、A3、A4不全相等,用A1、A2、A3、A4这个四数排出一个最大的四位数,再排出一个最小的四位数,对两者之差再重复这种操作,最终会得到6174这个数。如果开始这个数不是6174,问需要重复如上步骤几次才能得到6174?
比如给你1234。
4321 - 1234 = 3087
8730 - 378 = 8352
8532 - 2358 = 6174
一共需要三步
第一行输入一个整数N(0<N<100),下面有和N行,每行都有一个四位数。(四位数数字不全相等)
输出共N行,每行输出得到6174需要几步。
Sample Input
2
1234
6174
Sample Output
3
0
[解决办法]
仅供参考
int A1,A2,A3,A4,n,step,D[4],s[5];if (1!=scanf("%d",&n)) return 1;if (n<=0 || 10000<n) return 2;for (i=0;i<n;i++) { if (4!=sscanf("%c%c%c%c",&A1,&A2,&A3,&A4)) break; if (!isdigit(A1) || !isdigit(A2) || !isdigit(A3) || !isdigit(A4)) break; if (A1==A2 && A2==A3 && A3==A4) break; step=0; while (1) { if (A1=='6' && A2=='1' && A3=='7' && A4=='4') break; D[0]=A1;D[1]=A2;D[2]=A3;D[3]=A4; SordD();//将D[0..3]从小到大排序 sprintf(s,"%04d",D[3]*1000+D[2]*100+D[1]*10+D[0]-(D[0]*1000+D[1]*100+D[2]*10+D[3]); A1=s[0];A2=s[1];A3=s[2];A4=s[3]; step++; } printf("%d\n",step);}
[解决办法]
上帖中
D[0]=A1;D[1]=A2;D[2]=A3;D[3]=A4;
应改为
D[0]=A1-'0';D[1]=A2-'0';D[2]=A3-'0';D[3]=A4-'0';