zoukankan      html  css  js  c++  java
  • 谷歌笔试题--给定一个集合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;      
  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/samulescollection/p/3406953.html
Copyright © 2011-2022 走看看