华为机试

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

输出描述
最佳的最小种植间距
全部评论
三棵树,那么间距有两段,四颗则是三段;向做一个自然排序,用最大值前去最小值除以段数,得到最大间距,然后就是便利,从最大间距开始减小间距,找到适合的位置为止。
点赞 回复 分享
发布于 2023-06-28 22:57 四川
#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
点赞 回复 分享
发布于 2023-07-01 16:51 浙江

相关推荐

11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
1 5 评论
分享
牛客网
牛客企业服务