【每日一题】腾讯2017暑期实习生编程题-3
2021/9/9 22:37:43
本文主要是介绍【每日一题】腾讯2017暑期实习生编程题-3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 题目
- 思路
- 相关思考
- 代码(C++/牛客)
题目
题目来源
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?
(虽然上厕所的时候不必想这么多但是我还是做了)
思路
三种情况分别考虑
1 数字少于两个 输出为0 0
2 数字为两个 输出为1 1
3数字大于两个
首先考虑数字全为一样的情况,两者均为n*(n-1)/2
再考虑数字不完全一样的情况
最小差若为0,则将所有0的组合计数(需要考虑不相邻但同样的状态);若不为0,也计数(仅考虑相邻两个计数即可)。
最大差为最大值减去最小值,仅需分别计数a、b,并相乘即可
相关思考
1对最小差为0时的计数一时无从下手,参考了牛客网上的解析后,发现可以按照穷举的方式将其挑出……
2利用vector实现而非基础数组形式,并使用sort实现排序。
vector相关输入方法
代码(C++/牛客)
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int n; while (cin >> n){ if (n < 2){ cout << 0 << ' ' << 0 << endl; continue; } if (n == 2){ cout << 1 << ' ' << 1 << endl; continue; } //3个数以上的情况 vector<int> data; while (n--){ int temp; cin >> temp; data.push_back(temp); } int length = data.size(); sort(data.begin(), data.end()); //先求最小的,肯定是相邻的相减得到 int min_val = abs(data[1] - data[0]); for (int i = 2; i < length; ++i){ int cur = (data[i] - data[i - 1]); if (cur < min_val) min_val = cur; } //统计最小的数目 int min_count = 0; if (min_val == 0){//有相同大小的数子,统计个数,用组合求对数 for (int i = 1; i < length; ++i) { int j = i - 1; while (j >= 0 && data[i] == data[j]){ ++min_count; --j; } } } else { for (int i = 1; i < length; ++i){ int cur = (data[i] - data[i - 1]); if (cur == min_val) ++min_count; } } //求差最大的对数:最小的个数*最大的个数(如果最大的不等于最小的) int max_val = data[length - 1] - data[0]; int max_count = 0; int a, b; a = b = 0; for (int i = 0; i < length; ++i){ if (data[i] == data[0]) ++a; } for (int i = length - 1; i >= 0; --i){ if (data[i] == data[length - 1]) ++b; } if (max_val == 0)//当最大等于最小,即数据全部一样eg. 1 1 1 1时,显然 4*4是不对的 max_count = length*(length - 1) / 2; else max_count = a*b; cout << min_count << ' ' << max_count << endl; } return 0; }
这篇关于【每日一题】腾讯2017暑期实习生编程题-3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南