数字择优( 计算一个数与一组数字中的哪一个数字大小最接近)

一,应用场景

应需求根据两组经纬度计算出B点相对于A点的角度后,根据这个角度在一组预置点中选取最近的一个预置点

二,代码部分

 1 /**
 2      *   计算一个数与一组数字中的哪一个数字大小最接近
 3      * @param re
 4      * @param ble
 5      * @return
 6      */
 7     public static int choicePreset(int[] re,int ble) {
 8         //1.存差值的绝对值
 9         int[] result=new int[re.length];
10         //2.存差值对应的数字
11         Map<Integer, Integer> map=new HashMap<>();
12         int min=0;
13         for (int i=0;i<re.length;i++) {
14             //3.计算出这两个数字之间的差,绝对值
15             min=Math.abs(re[i]-ble);
16             result[i]=min;
17             map.put(min, re[i]);
18         }
19         //对差值的绝对值排序
20         Arrays.sort(result);
21         //返回与ble差值最小一个数
22         return    map.get(result[0]);
23     }
public static void main(String[] args) throws InterruptedException {
        int[] re= {1,5,6,9,25,36,95,64,23};
        int ble=96;
        System.out.println(choicePreset(re, ble));
}

三.测试结果

原文地址:https://www.cnblogs.com/KdeS/p/12069931.html

时间: 2024-08-26 15:05:39

数字择优( 计算一个数与一组数字中的哪一个数字大小最接近)的相关文章

一组数据中只有一个数字出现一次,其他数成对出现,找出这个数

一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的,请找出这个数字. (使用位运算) 直接使用异或运算. 代码如下: #include<stdio.h> #include<stdlib.h> int main() { int arr[]={3,5,9,2,5,3,2};  int size=sizeof(arr)/sizeof(arr[0]); int i=0,find=0; for(;i<size;i++) { find^=arr[i];//循环进行异或运算 }

一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)

#include <stdio.h> int main() {      int arr[5];      int i,j;      int len=sizeof(arr)/sizeof(arr[0]);     //初始化数组      for(i=0;i<len;i++)            {        scanf("%d",&arr[i]);      }     //查找的过程      j=arr[0];     for(i=1;i<

一组数组中只有一个数(两个数)出现一次,其他的都成对出现,找出该数

一组数据中只有一个数字出现了一次.其他所有数字都是成对出现的.请找出这个数字.(使用位运算) >可以这么理解:如果两个数相等,它们异或之后的结果是0.而0与任何数异或都是该数本身. (比如00000001^00000001结果是0.00000000^00000001=00000001) 那么将一组数中所有元素异或,相同的数字结果是0,最后的结果就是单独出现的数字. 编程实现如下: #include <stdio.h> #include <windows.h> int main

剑指Offer面试题51(Java版):数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数.请找出数组中任意一个重复的数字. 例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3. 解决这个问题的一个简单的方法是先把输入的数组排序.从排序的数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排序后的数组就可以了.排序一个长度为n的数组需要时间为O(nlogn)时间. 还可以利用哈希表来解决这个问题,从头到尾

输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少

输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少? 例子:输入数字9,则输出结果位9.因为[0-9]中,只有数字7有连续的三个'1'出现,别的都没有,所以一共有9个数字满足要求. 分析:这个题目与求解一个正整数中'1'的个数有点类似,就是进行一些循环处理. 代码如下: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n,num_1=0,k=0; 6 cin>>n;

数位dp(求1-n中数字1出现的个数)

题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不可以随意取,true为没降,true为已降):常规的记忆化搜索 代码: /****************************************************** * author:xiefubao *******************************************************/ #p

根据输入的字符串,分别输出字母、数字、特殊字符的个数

#include "stdio.h" void main() { //定义字符串,i 接收字符串变量 j 循环条件变量 z 字母总数 s 数字总数 f 符号总数 char i[100]; int j,z=0,s=0,f=0; printf("请输入一个字符串:"); scanf("%s",&i); for(j=0;j<=strlen(i);j++) //strlen(i) 计算键入的字符总长,与j比较作为循环条件 { printf(

大数字的计算

package object; import java.math.BigDecimal; import java.math.BigInteger; /** * @author dayu * @Describe 大数字的计算 */ public class BigIntegerDemo { public static void main(String[] args) { BigInteger bigInteger1 = new BigInteger("45645645645645645645645

3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /* * 3.键盘输入10个数,放到数组中 (1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中 */ public class Test3 { public static int[] arr = new int[10]; public static void