关闭

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

1317人阅读 评论(0) 收藏 举报
分类:

腾讯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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9214次
    • 积分:247
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条