当前位置:   article > 正文

CCF-GESP计算机学会等级考试2023年9月二级C++T2数字黑洞_2780: gsep2级9月 2.数字黑洞

2780: gsep2级9月 2.数字黑洞
试题编号 2023-09-23-02-C-02
试题名称 :数字黑洞
时间限制 1.0 s
内存限制 128.0 MB
3.2.1
问题描述
给定一个三位数,要求各位不能相同。例如,352是符合要求的,112是不符合要求的。将这个三位数的三个数字重 新排列,得到的最大的数,减去得到的最小的数,形成一个新的三位数。对这个新的三位数可以重复上述过程。神 奇的是,最终一定会得到495!
试试看,重新排列352,得到的最大数为532,最小数为235,它们的差是297;变换297,得到972-279=693;变换693,963-369=594;变换594,954-459=495。因此, 经过 4次变换得到了495。
现在,输入的三位数,你能通过编程得出,这个三位数经过多少次变换能够得到 495 吗?
3.2.2
输入描述
输入一行,包含一个符合要求的三位数N 。
3.2.3
输出描述
输出一行,包含一个整数 C,表示经过C 次变换得到495。
3.2.4
样例输入 1
352
3.2.5
样例输出 1
4
解析:模拟即可,使用数组排序的代码如下:
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[3];
  4. int main() {
  5. int n;
  6. cin >> n;
  7. int cnt = 0;
  8. while (n != 495) {
  9. for(int i = 0; i < 3; i++) {
  10. a[i] = n % 10;
  11. n /= 10;
  12. }
  13. sort(a,a+3);
  14. n=a[2]*100+a[0]-a[0]*100-a[2];
  15. cnt++;
  16. }
  17. cout<<cnt;
  18. return 0;
  19. }

不用数组和排序的代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int n;
  5. int a,b,c;
  6. cin >> n;
  7. int cnt = 0;
  8. while (n != 495) {
  9. a=n/100;
  10. b=n/10%10;
  11. c=n%10;
  12. if (a>b){
  13. swap(a,b);
  14. }
  15. if (b>c){
  16. swap(b,c);
  17. }
  18. if (a>b){
  19. swap(a,b);
  20. }
  21. n=c*100+a-a*100-c;
  22. cnt++;
  23. }
  24. cout<<cnt;
  25. return 0;
  26. }
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int n = 0;
  5. cin >> n;
  6. for (int t = 0; ; t++) {
  7. if (n == 495) {
  8. cout << t << endl;
  9. break;
  10. }
  11. int m0 = n % 10, m1 = n / 10 % 10, m2 = n / 100;
  12. int tmax = 0, tmin = 0;
  13. if (m0 >= m1 && m1 >= m2) {
  14. tmax = m0 * 100 + m1 * 10 + m2;
  15. tmin = m2 * 100 + m1 * 10 + m0;
  16. } else if (m0 >= m2 && m2 >= m1) {
  17. tmax = m0 * 100 + m2 * 10 + m1;
  18. tmin = m1 * 100 + m2 * 10 + m0;
  19. } else if (m1 >= m0 && m0 >= m2) {
  20. tmax = m1 * 100 + m0 * 10 + m2;
  21. tmin = m2 * 100 + m0 * 10 + m1;
  22. } else if (m1 >= m2 && m2 >= m0) {
  23. tmax = m1 * 100 + m2 * 10 + m0;
  24. tmin = m0 * 100 + m2 * 10 + m1;
  25. } else if (m2 >= m0 && m0 >= m1) {
  26. tmax = m2 * 100 + m0 * 10 + m1;
  27. tmin = m1 * 100 + m0 * 10 + m2;
  28. } else { // m2 >= m1 && m1 >= m0
  29. tmax = m2 * 100 + m1 * 10 + m0;
  30. tmin = m0 * 100 + m1 * 10 + m2;
  31. }
  32. n = tmax - tmin;
  33. }
  34. return 0;
  35. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/602694
推荐阅读
相关标签
  

闽ICP备14008679号