中兴笔试 数字的最小排列

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

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

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

实例:

输入:

lockingKey = 706;

输出:

607

函数形式

long findUnlock(long lock)

{

}

 

参考程序:

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 #include <algorithm>
 5 #include <cmath>
 6 using namespace std;
 7
 8 long findUnlock(long lock)
 9 {
10     if (lock < 0)
11     {
12         lock = -lock;
13     }
14     string str;
15     str = to_string(lock);
16     vector<int> ivec;
17     int val;
18     for (int i = 0; i < str.size(); i++)
19     {
20         val = str[i] - ‘0‘;
21         ivec.push_back(val);
22     }
23     sort(ivec.begin(), ivec.end());
24     int j;
25     if (ivec[0] == 0)
26     {
27         for (int i = 0; i < ivec.size(); i++)
28         {
29             if (ivec[i] != 0)
30             {
31                 j = i;
32                 break;
33             }
34         }
35     }
36     swap(ivec[0], ivec[j]);
37     long s = 0;
38     for (int i = 0; i < ivec.size(); i++)
39     {
40         s += pow(10, ivec.size() - i - 1)*ivec[i];
41     }
42     return s;
43 }
44
45 int main()
46 {
47     cout << findUnlock(-83047) << endl;
48     return 0;
49 }
时间: 2025-01-03 20:16:03

中兴笔试 数字的最小排列的相关文章

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最小的一个

/** * @Version 1.0.0 * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数, * 打印能拼接出的所有数字的最小的一个.例如输入{3,32,321,4},则打印最小的数字是 * 321323 * * 其实就是一次排序,只是比较大小的方式与数值比较有所不同 * 这里采用冒泡排序的方式 */public class Pro33 { @MyAnswer public static void f(int array[]){ for(int i=0;i<array.length-1

找出不小于给定数字的最小2的幂值

2017/3/13 12:59:41 看JDK源码,在HashMap类中发现了一个可以很好解决这个问题的方法. 问题描述: 假设给定 14,输出16:给定16,也输出16:给定17,输出32.输出满足给定数字的最小2的幂值 算法: int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; # 001XXXXX --> 0011XXXX n |= n >>> 2; # 0011XXXX --> 001

以整数元素构成的list中的数字组成最小整数

问题 把一个int型数组中的数字拼成一个串,这个串代表的数字最小. 思路说明 不同角度,对原题理解有所不同.我依照以下的理解方式求解. 对这个问题的理解: 有一个元素是int类型的list: 将上述list中的每一个元素的数字分别取出来.然后将这些数字的顺序进行从新排列,并将当中的最小整数输入.就是题目中要求的最小数字. 假设依照上述理解,在解题中,最应当小心的是数字假设非常大,比方list中的某个int元素是:222222222222227777777777776666666666699999

数字三角形最小路径和—动态规划

思路:自底向上求解,从倒数第二行开始,本行节点到最后一行的最小路径和等于该节点的数据加上下面左右两个数据中最小的一个.不使用额外空间,直接将最小路径和存储到原有的数组中.1 int minimumTotal(vector<vector<int>> &triangle) { 2 // write your code here 3 for (int i = triangle.size() - 2; i >= 0; i--) { 4 for (int j = 0; j &l

CVTE笔试—数字分割

欢迎转载,转载请注明出处:http://www.cnblogs.com/xyzyj/p/7469356.html 题目:给定一个整数n和一个整数m,将n按照位分割成多个数字,使得这多个数字的和最接近m,           例如n=654321,m=50,则最大值为48(6+5+4+32+1). 分析:(1)对于一个Integer类型的数字n和m,首先有种异常情况;   即 n<m :直接返回n: (2)将整数n按位存入一个整型数组中,所求的最大值的位数肯定小于等于m的位数, 则以2为大小作为窗

n个数字的不同排列有n!个,要求将这些排列组成的数,按从小到大的顺序进行排列

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace One_two { /*   * 2.编写一个控制台应用程序,要求完成下列功能. * 接收一个整数n. * 如果接收的值n为正数,输出1到n间的全部整数. * 如果接收的值为0或负值,用break或者return退出程序. * 转到第一步继续接收下

Leetcode31---&gt;Next Permutation(数字的下一个排列)

题目: 给定一个整数,存放在数组中,求出该整数的下一个排列(字典顺序):要求原地置换,且不能分配额外的内存 举例: 1,2,3 → 1,3,2:  3,2,1 → 1,2,3:  1,1,5 → 1,5,1:   解题思路: 1. 由于要找出整数的下一个排列,且按照字典顺序,因此要找出当前排列中需要交换的的那个位,即找到从右到左第一个不满足升序的元素的前一个元素nums[index1], 以及从右到左第一个大于nums[index1]的元素nums[index2]; 2. 交换两个元素:因为是按

[CareerCup] 18.6 Smallest One Million Numbers 最小的一百万个数字

18.6 Describe an algorithm to find the smallest one million numbers in one billion numbers. Assume that the computer memory can hold all one billion numbers. 这道题让我们在十亿个数字中找到最小的一百万个数字,而且限定了计算机只有能存十亿个数字的内存.这题有三种解法,排序,最小堆,和选择排序. 首先来看排序方法,这种方法简单明了,就是把这十亿

数组排序组合最小数字

给定一个整型数组,对这个数组排序,使得按序拼接数组各个元素得到的数值最小. 例如 [3,83,8,13,1]  排序后为:[1,13,3,83,8] 依次拼接得到 1133838 思路: 一,如果不考虑效率,那么可以对所有的数字进行依次排列组合,求出最小的那么效率不高,而且实现所有数字的排列组合也比较麻烦. 二:换个思路,首先还是对数组进行排序,求出排序后拼接最小的数字,外部排序可以选用各种常用的排序算法,这里选用选择排序.关键是比较两个元素谁在前边,谁在后边.多个元素排列组合比较麻烦,但是选取