zoukankan      html  css  js  c++  java
  • 中兴2018届应届生在线编程测验 数字的最小排列

    题目:根据给定的"锁定密码"(一串数字),可以计算出"解锁秘钥",它是该数中数字的最小排列(数量上),且它不会从零开始.

    输入:一串数字lockingKey,约束-100000<= lockingKey <= 100000

    输出:返回一个表示解锁的整数

    实例:

    输入:

    lockingKey = 706;

    输出:

    607

    函数形式

      long findUnlock(long lock)

      {

      }

    思路分析:

     题中表述的是数字的最小排列问题,且第一位不能为0.可以先把这些数字存到vector中,然后从小到大排列,排列完如果第一位是0的话,把第一个非0的数字和第一位交换.这样就基本实现了.

     

     参考程序:

    
    
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    long findUnlock(long lock)
    {
        if (lock < 0)
        {
            lock = -lock;
        }
        string str;
        str = to_string(lock);    //倘若是VS2010下,要求to_string的参数为long long 类型,要改成long long(lock)   //转化为string类型,方便处理.
        vector<int> ivec;
        int val;
        for (int i = 0; i < str.size(); i++)
        {
            val = str[i] - '0';  //这是一个技巧,把数字字符改为真正的数字
            ivec.push_back(val);
        }
        sort(ivec.begin(), ivec.end());
        int j;
        if (ivec[0] == 0)
        {
            for (int i = 0; i < ivec.size(); i++)
            {
                if (ivec[i] != 0)
                {
                    j = i;
                    break;
                }
            }
            swap(ivec[0], ivec[j]);  ///若第一位为0,把第一个非0的数字和第一位交换.注意放在if里面.要拿非特殊也验证下
        }
        long s = 0;
        for (int i = 0; i < ivec.size(); i++)
        {
            s += pow(10, ivec.size() - i - 1)*ivec[i];    //倘若是VS2010下,pow不能两个都是int,有pow(double,int)的用法,要改成pow(10.0,...)
        }
        return s;
    }
    
    int main()
    {
        cout << findUnlock(-83047) << endl;
        return 0;
    }
    
    
    
     
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    UWP AppConnection.
    Qt 多线程使用moveToThread
    C#综合细说进程、应用程序域与上下文
    C++ std::function
    商品价格加价区间的实现(策略模式)
    学习web前端三个月感悟
    triangle leetcode C++
    Linux入门视频
    轻松学习Linux之进程监视与管理
    阻止缓冲区溢出攻击
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/7429793.html
Copyright © 2011-2022 走看看