#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main() {
int n, a[4], b[4], m[4], i = 4, c = 0;
void shuzu(int n, int a[]);
void ssort(int a[]);
void jsort(int b[]);
int shu(int a[]);
void print(int a[], int b[], int m[]);
scanf_s("%d", &n);
while (c != 6174) {
int p, q;
shuzu(n, a);
ssort(a);
for (int i = 0; i < 4; i++) b[i] = a[i];
jsort(b);
p=shu(a);
q = shu(b);
c = q - p;
shuzu(c, m);
print(b, a,m);
if (c == 0) break;
n = c;
}
return 0;
}
void print(int a[], int b[], int m[]) {
void p(int a[]);
p(a);
printf(" - ");
p(b);
printf(" = ");
for(int i=3;i>=0;i--) printf("%d",m[i]);
printf("\n");
}
void p(int a[]) {
for (int i = 0; i < 4; i++) {
printf("%d", a[i]);
}
}
int shu(int a[]) {
int n=0;
for (int i = 0; i < 4; i++) {
if (i != 0) n *= 10;
n += a[i];
}
return n;
}
void shuzu(int n, int a[]) {
for(int i=0;i<4;i++){
a[i] = n % 10;
n /= 10;
}
}
void ssort(int a[]) {
int temp;
for (int i = 0; i <= 3; i++) {
for (int j = 0; j < 3; j++) {
if (a[j] >= a[j+1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
void jsort(int a[]) {
int temp;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (a[j] <= a[j+1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
发现自己两个大问题:
- 对自带的库函数非常不熟悉,比如sort函数,尽管之前用过一次,但还是想不起来。
- 思路混乱,全靠debug。这个问题中的a,b,m三个数组,数位顺序是相反的,因此还得分两种输出,改变shuzu函数的数组化顺序,就可以解决这个问题。这个问题在主函数的while循环那里也很明显。这一块应该还有优化的可能,起码可以不要这么乱。
这个代码实在太好看了。[代码](https://blog.csdn.net/sunlanchang/article/details/86760803)