华为机试
1,2简单题是找最大拼接数字和最小拼接数字。比较简单直接就过了。
第三题找完全没思路,直接寄。
题目描述
按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在一些可以种植的点来种植树木
在树苗有限的情况下,要达到最佳效果,就要尽量散开种植,不同树苗之间的最小间距要尽量大。给你一个适合种情树木的点坐标和一个树苗的数量,请帮小明选择一个最佳的最小种植间距。
例如,适合种植树木的位置分别为1,3,5,6,7,10,13 树苗数量是3,种植位置在1,7,13,树苗之间的间距都是6,均匀分开,就达到了散开种植的目的,最佳的最小种植间距是6
输入描述
第1行表示适合种树的坐标数量
第2行是适合种树的坐标位置
第3行是树苗的数量
例如:
7
1 5 3 6 10 7 13
3
输出描述
最佳的最小种植间距
第三题找完全没思路,直接寄。
题目描述
按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在一些可以种植的点来种植树木
在树苗有限的情况下,要达到最佳效果,就要尽量散开种植,不同树苗之间的最小间距要尽量大。给你一个适合种情树木的点坐标和一个树苗的数量,请帮小明选择一个最佳的最小种植间距。
例如,适合种植树木的位置分别为1,3,5,6,7,10,13 树苗数量是3,种植位置在1,7,13,树苗之间的间距都是6,均匀分开,就达到了散开种植的目的,最佳的最小种植间距是6
输入描述
第1行表示适合种树的坐标数量
第2行是适合种树的坐标位置
第3行是树苗的数量
例如:
7
1 5 3 6 10 7 13
3
输出描述
最佳的最小种植间距
全部评论
三棵树,那么间距有两段,四颗则是三段;向做一个自然排序,用最大值前去最小值除以段数,得到最大间距,然后就是便利,从最大间距开始减小间距,找到适合的位置为止。
#include<stdio.h>
(30951)#include<stdlib.h>
#include<malloc.h>
int A[] = { 1,5,3,6,10,7,13 };
int countA = sizeof(A) / sizeof(A[0]);
int conntT = 3;
int cmpA( void const*a, void const* b)
{
int aa = *(int*)a;
int bb = *(int*)b;
return aa-bb;
}
int minstep = 0;
int maxstep = 0;
int max(int a, int b)
{
return a > b ? a : b;
}
int min(int a, int b)
{
return a < b ? a : b;
}
int main()
{
qsort(A, countA, sizeof(int), cmpA);
minstep = A[1]-A[0];
maxstep = A[countA-1] - A[0];
for (size_t i = 0; i < countA - 1; i++)
{
minstep = min(minstep, min(minstep, A[i + 1] - A[i]));
}
for (size_t i = minstep; i < maxstep; i++)
{
int distance = 1 + i * (conntT - 1);
if (distance <= A[countA - 1])
{
continue;
}
else
{
minstep = i-1;
break;
}
}
return 0;
}
跑了一下结果是6
相关推荐
11-14 15:03
西安电子科技大学 C++ 点赞 评论 收藏
分享