zoukankan      html  css  js  c++  java
  • 腾讯2019实习面试题

    1. 题目一:数列极差问题

    小Q的好朋友牛牛在纸上写了长度为n的正整数数列。牛牛要求小Q每次从数列中选取两个数a,b,把这两个数从数列中移除出去,然后在数列中加入a * b + 1,直到只剩一个数为止。小Q发现根据操作顺序的不同,最后得到的数的大小也不一样。小Q现在想让你帮他计算,在所有情况中能获得的最大值减去能获得的最小值等于多少?

    输入:
    3
    1
    2
    3
    输出:
    2

    解题方法:

    第一步:先要对你输入的一个数组进行排序

    第二步:擦掉最大的两个数,然后插入a*b+1 继续擦掉最大的两个数,最终得到最大值。

    第三步:擦掉最大的两个数,然后插入a*b+1继续擦掉最小的两个数,最终得到最小值。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int main(){
     7     int n;
     8     int num[1000];
     9     while(scanf("%d", &n) != EOF){
    10         for(int i=0; i<n; ++i)
    11             scanf("%d", &num[i]);
    12         sort(num, num+n);
    13         if(n<3){
    14             printf("%d
    ", 0);
    15             continue;
    16         }
    17         int min = num[n-1];
    18         for(int i=0; i<n-1; ++i){
    19             min = min * num[n-2-i] + 1;
    20         }
    21 
    22         int max = num[0];
    23         for(int i=1; i<n; ++i){
    24             max = max * num[i] + 1;
    25         }
    26         printf("%d
    ", max-min);
    27     }
    28     return 0;
    29 }

    2. 题目二:自增数组

    小Q发现了一种特殊的数组,叫做自增数组。这个数组支持一种操作:每次操作可以把数组中一个数自增1。现在有一个长度为n的自增数组,小Q现在想利用这个操作把数组中的每个数都变得不一样,请问你最少需要多少次操作?

    #include <iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main() {
        int n = 0;
        vector<int> array;
        cin>>n;
        int t;
        for(int i=0 ;i<n; ++i){
            cin>>t;
            array.push_back(t);
        }
        vector<int> cf;
        sort(array.begin(), array.end());
        for(int i=1; i<n; ++i){
            if(array[i] == array[i-1])
                cf.push_back(array[i]);
        }
        int len = max(n+1, array[n-1]+1);
        vector<int> arr(len,0);
        for(int i=0; i<n; ++i){
            arr[array[i]] = array[i];
        }
        int idx=0;
        int cnt=0;
        for(int i=1; i<len; ++i){
            if(arr[i] == 0){
                cnt += i - cf[idx];
                idx++;
                if(idx == cf.size())
                    break;
            }
        }
        cout<<cnt;
    }
  • 相关阅读:
    mysql连接数过多 解决方案
    单列模式下的数据库连接与Servlet之间页面访问用户登录的小例子
    Spring MVC理解和主要使用的注解详解
    Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)
    xlwings
    openpyxl
    【python】Excel两表中某个信息对比
    pycharm中配置python版本问题
    python指令提示不是内部或外部命令(环境变量配置)
    python管理电脑文件及文件夹
  • 原文地址:https://www.cnblogs.com/sclczk/p/10960368.html
Copyright © 2011-2022 走看看