您的位置:首页 > 编程语言

腾讯2017年实习生编程题目(第三题)——有趣的数字 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?

2016-09-09 15:10 771 查看
腾讯2017年实习生编程题目(第三题)



3.有趣的数字

小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?

输入描述:

输入包含多组测试数据。
对于每组测试数据:
N -
本组测试数据有n个数
a1,a2...an -需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.

输出描述:

对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

输入例子:

6
45 12 45 32 5 6

输出例子:

1 2

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int max(vector<int>&);
int min(vector<int>&);
int test(int, vector<int>&);
int main()
{
int n;
cin >> n;
vector<int> v;
for (int i = 0; i < n; ++i)
{
int num;
cin >> num;
v.push_back(num);
}
int min_int = min(v);
int max_int = max(v);
int min_num = test(min_int,v);
int max_num = test(max_int, v);
cout << min_num << " " << max_num << endl;
return 0;
}
int min(vector<int>& v)
{
int min = 0;
int len = v.size();
for (int i = 0; i < len-1; ++i)
{
for (int j = i+1; j < len; j++)
{
min = abs(v.at(0)-v.at(1));
if (abs(v.at(i) - v.at(j)) < min)
{
min = abs(v.at(i) - v.at(j));
}
}
}
return min;
}
int max(vector<int>& v)
{
int max = 0;
int len = v.size();
for (int i = 0; i < len - 1; ++i)
{
for (int j = i + 1; j < len; j++)
{
max = abs(v.at(0) - v.at(1));
if (abs(v.at(i) - v.at(j)) > max)
{
max = abs(v.at(i) - v.at(j));
}
}
}
return max;
}
int test(int num, vector<int>& v)
{
int n = 0;
int len = v.size();
for (int i = 0; i < len - 1; ++i)
{
for (int j = i + 1; j < len; j++)
{
if (abs(v.at(i) - v.at(j)) == num)
++n;
}
}
return n;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐