• 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。


    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    Google2009华南地区笔试题

    给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。比如,A=[1,0] K=21 那么输出结构应该为100。

     1 <pre name="code" class="cpp">// 一个从小到大排序的整数数组,元素都是在[0,9]之间的数字,但未必全部包含  
     2 // 用数组中的数字(可以重复)组成一个最小的给定位数的正整数  
     3 int generate_min_int_containing_duplicate_digit(int *array, int n, int bit_num)  
     4 {  
     5     // 找到最小的非零整数  
     6     int data;  
     7     for (int i = 0; i < n; ++i)  
     8     {  
     9         if (array[i] > 0)  
    10         {  
    11             data = array[i];  
    12             break;  
    13         }  
    14     }  
    15     for (int i = 1; i < bit_num; ++i)  
    16     {  
    17         data = data * 10 + array[0];  
    18     }  
    19     return data;  
    20 }  
    21   
    22   
    23 // Google2009华南地区笔试题  
    24 // 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),  
    25 // 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。  
    26 // 比如,A=[1,0] K=21 那么输出结构应该为100。  
    27 int generate_min_int_greater_than_k(int *array, int n, int k)  
    28 {  
    29     std::sort(array, array+n);  
    30     // high_digit: k的最高位数字  
    31     // bit_num: k的位数  
    32     int high_digit = k, bit_num = 1;  
    33     while (high_digit/10 > 0)  
    34     {  
    35         ++bit_num;  
    36         high_digit /= 10;  
    37     }  
    38     // 查找数组中比k的最高位大的最小的数字  
    39     int i;  
    40     for (i = 0; i < n; ++i)  
    41     {  
    42         if (array[i] >= high_digit)  
    43             break;  
    44     }  
    45     if (i == n) // 数组中的数字都比K的最高位小  
    46     {  
    47         return generate_min_int_containing_duplicate_digit(array, n, bit_num+1);  
    48     }  
    49     else if (array[i] == high_digit)// 数组中有一位数字跟K的最高位相等  
    50     {  
    51         int low_data = k - high_digit * pow(10, bit_num-1);  
    52         return array[i]*pow(10, bit_num-1)+generate_min_int_greater_than_k(array, n, low_data);  
    53     }  
    54     else // 数组中有一位数字比k的最高位高  
    55     {  
    56         int data = array[i];  
    57         for (int j = 1; j < bit_num; ++j)  
    58         {  
    59             data = data * 10 + array[0];  
    60         }  
    61         return data;  
    62     }  
    63     return 0;      
  • 相关阅读:
    数据库设计三大范式
    导航下拉栏 简单方法
    原生js制作弹出框
    原生js和jquery实现图片轮播特效
    用js 做大图轮播方法(一)
    Apple 企业开发者账号申请记录
    libnids介
    n++ ++n
    空指针为什么能调用成员函数?
    c++单例
  • 原文地址:https://www.cnblogs.com/samulescollection/p/3406953.html
Copyright © 2020-2023  润新知