337A. Puzzles

题目

在这里插入图片描述

翻译

题目

    毕业将近,Manana老师不久就要对一个班级say goodby了。她决定准备一个送别礼物给她的 n n n个学生并且给每人一个拼图(正如维基百科说的那样,需要组装许多形状各异的碎片,碎片可以相互镶嵌)
    售货员告诉老师店里有 m m m个拼图,但它们的难度和大小各不同相同。具体来说,第一个拼图有 f f f1个碎片,第二个有 f f f2个碎片,以此类推。
    Manana不希望让孩子们沮丧,因此她决定她送出去的礼物中碎片个数的差异要尽可能地小。设 A A A为老师所买的拼图中碎片数最多的碎片个数, B B B为最少的碎片个数。她希望她所选的n个拼图中 A − B A-B AB尽可能小。帮助老师找到 A − B A-B AB最小的值。

输入

    第一行为以空格分隔开的整数 n n n m ( 2 ≤ n ≤ m ≤ 50 ) m(2≤n≤m≤50) m(2nm50)。第二行为 m m m个以空格分割开的整数 f f f1 f f f2,…, f f fm ( 4 ≤ (4≤ (4 f f f1 ≤ 1000 ) ≤1000) 1000一商店中每个拼图的碎片数。

输出

    输出最小可能的值。

分析

    先排序,再按照 n n n的长度求出每段的值,得出最小值。

代码

#include<iostream>
using namespace std;
int main()
{
	int n,m ,arr[51];
	int temp;
	int i, j;
	cin >> n>>m;
	for (i = 0; i < m; i++)
	{
		cin >> arr[i];
	}
	//冒泡排序
	for (i = 0; i < m - 1; i++)
		for (j = 0; j < m - 1 - i; j++) 
		{
			if (arr[j] > arr[j + 1]) 
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	int min = 1000;
	for (i = 0, j = i + n - 1; j < m; i++, j = i + n - 1)
	{
		if (arr[j] - arr[i] < min)
			min = arr[j] - arr[i];
	}
	cout << min;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值