• nyoj 57-6174问题(相邻元素判断问题)


    57-6174问题


    内存限制:64MB 时间限制:1000ms Special Judge: No
    accepted:16 submit:31

    题目描述:

    假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

    比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

    输入描述:

    第一行输入n,代表有n组测试数据。
    接下来n行每行都写一个各位数字互不相同的四位数

    输出描述:

    经过多少次上面描述的操作才能出现循环

    样例输入:

    1
    1234

    样例输出:

    4

    分析:
      1、需要注意的是,要将上一步的结果存起来和下一步进行比较

    核心代码:
     1 while(my_now != my_next)
     2 {
     3     ++ cnt;
     4     my_now = my_next;
     5     int temp = my_now, i = 0;
     6     while(temp)
     7     {
     8         A[i ++] = temp % 10;
     9         temp /= 10;
    10     }
    11     sort(A, A+4);
    12     int a = A[0] + A[1] * 10 + A[2] * 100 + A[3] * 1000; // a -- max
    13     int b = A[0] * 1000 + A[1] * 100 + A[2] * 10 + A[3]; // b -- min
    14     my_next = a - b;
    15 }

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <map>
     8 #include <queue>
     9 #include <set>
    10 
    11 using namespace std;
    12 
    13 int main()
    14 {
    15 
    16     int t;
    17     scanf("%d", &t);
    18     while(t --)
    19     {
    20         int n, cnt = 0, my_now, my_next, A[6];
    21         scanf("%d", &n);
    22         my_now = -1, my_next = n;
    23         while(my_now != my_next)
    24         {
    25             cnt ++;
    26             my_now = my_next;
    27             int temp = my_now, i = 0;
    28             while(temp)
    29             {
    30                 A[i ++] = temp % 10;
    31                 temp /= 10;
    32             }
    33             sort(A, A + 4);
    34             int a = A[0] + A[1] * 10 + A[2] * 100 + A[3] * 1000; // a -- max
    35             int b = A[0] * 1000 + A[1] * 100 + A[2] * 10 + A[3]; // b -- min
    36             my_next = a - b;
    37         }
    38         printf("%d
    ",cnt);
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    nginx配置ssl双向验证 nginx https ssl证书配置
    查看nginx cache命中率
    nginx 直接在配置文章中设置日志分割
    tomcat配置文件server.xml详解
    nagios服务端安装
    nagios客户端安装
    nagios原理及配置详解
    Nagios 监控系统架设全攻略
    nginx日志配置
    为MySQL选择合适的备份方式
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9108189.html
Copyright © 2020-2023  润新知