题目
给出一个四位数,按照增序排列得到一个数a,按照降序排列得到一个数b,用b-a得到一个四位数,再将这个四位数进行这样的操作,直到得到6174或者0.
I/O
Sample Input 1:
6767
Sample Output 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
Sample Input 2:
2222
Sample Output 2:
2222 - 2222 = 0000
算法
模拟题,部分超时,对这种线性复杂度的题,我也没办法。
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
char ini[4];
int main()
{ char ini[4];
scanf("%s", ini);
int flag = 1;
while(flag)
{ sort(ini, ini+4);
//printf(" ini %s %d\n", ini, (ini[3]-'0')*1000 + (ini[2]-'0')*100 + (ini[1]-'0')*10 + ini[0]-'0');
int max = (ini[3]-'0')*1000 + (ini[2]-'0')*100 + (ini[1]-'0')*10 + ini[0]-'0';
//printf(" max = %d\n", max);
int min = (ini[0]-'0')*1000 + (ini[1]-'0')*100 + (ini[2]-'0')*10 + ini[3]-'0';
//printf(" min = %d\n", min);
int tmp = max-min;
//printf("tmp = %d\n", tmp);
if(tmp == 0){ printf("%d - %s = 0000", max, ini);break;}
else
{ if(tmp == 6174)
flag = 0;
printf("%d - %s = %d\n", max, ini, tmp);
ini[3] = tmp%10+'0';
ini[2] = (tmp%100)/10+'0';
ini[1] = (tmp%1000)/100+'0';
ini[0] = tmp/1000+'0';
}
}
return 0;
}