PAT(甲级)1069 The Black Hole of Numbers (20point(s))

妖狐艹你老母 2024-05-08 05:54 155阅读 0赞
题目

题目链接

思路

如果n != 6174就一直迭代,迭代过程中把每个数拆分到一个数组中进行排序,二者做差,如果相等,提前结束迭代;否则继续迭代直到 n = 6174;
注意,采用上述写法,如果一开始输入 6174 不会进入迭代,需要特判一下;
此外,为了不重复写比较函数,这里借用了一个全局变量,根据 flag 的取值判断排序标准;

代码
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7. const int maxn = 1e5 + 10;
  8. int flag = 0;
  9. bool cmp(int a, int b){
  10. //如果flag等于零,从大向小排,否则从小向大排
  11. if(flag == 0) return a > b;
  12. else return a < b;
  13. }
  14. //传入一个标志位,判断排序标准
  15. int helper(int n, int t){
  16. int ans = 0, i = 0;
  17. int c[5];
  18. memset(c, 0, sizeof(c));
  19. while(n > 0){
  20. c[i ++] = n % 10;
  21. n /= 10;
  22. }
  23. flag = t;
  24. sort(c, c + 4, cmp);
  25. for(int i = 0; i < 4; i ++) ans = ans * 10 + c[i];
  26. return ans;
  27. }
  28. int main()
  29. {
  30. int n;
  31. scanf("%d", &n);
  32. //注意6174是个特例
  33. if(n == 6174) {
  34. printf("7641 - 1467 = 6174\n");
  35. return 0;
  36. }
  37. while(n != 6174){
  38. int a = helper(n, 0);
  39. int b = helper(n, 1);
  40. if(a == b){
  41. printf("%04d - %04d = %04d\n", a, b, a - b);
  42. break;
  43. }
  44. else {
  45. printf("%04d - %04d = %04d\n", a, b, a - b);
  46. n = a - b;
  47. }
  48. }
  49. system("pause");
  50. return 0;
  51. }

发表评论

表情:
评论列表 (有 0 条评论,155人围观)

还没有评论,来说两句吧...

相关阅读