java计算值所占的百分比

硅谷探秘者 Md java基础,算法基础 999 0 0

输入一个整数数组a,输出一个同样长度的数组b表示对应a数组各个位置上的元素值占a数组总值的百分比。

public static double[] getPercentValue(int[] arr){
        //求和
        double sum = 0;
        if(sum <= 0){
            for (int i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
        }
        //10的2次幂是100,用于计算精度。
        double digits = 1;
        //扩大比例100
        double[] votesPerQuota = new double[arr.length];
        for(int i = 0; i < arr.length; i++){
            double val = arr[i] / sum * digits * 100;
            votesPerQuota[i] = val;
        }
        //总数,扩大比例意味的总数要扩大
        double targetSeats = digits * 100;
        //再向下取值,组成数组
        double[] seats = new double[arr.length];
        for(int i = 0; i < votesPerQuota.length; i++){
            seats[i] = Math.floor(votesPerQuota[i]);
        }
        //再新计算合计,用于判断与总数量是否相同,相同则占比会100%
        double currentSum = 0;
        for (int i = 0; i < seats.length; i++) { 
            currentSum += seats[i];
        }
        //余数部分的数组:原先数组减去向下取值的数组,得到余数部分的数组
        double[] remainder = new double[arr.length];
        for(int i = 0; i < seats.length; i++){
            remainder[i] = votesPerQuota[i] - seats[i];
        }
        while(currentSum < targetSeats){
            double max = 0;
            int maxId = 0;
            for(int i = 0;i < remainder.length;++i){
                if(remainder[i] > max){
                    max = remainder[i];
                    maxId = i;
                }
            }
            //对最大项余额加1
            ++seats[maxId];
            //已经增加最大余数加1,则下次判断就可以不需要再判断这个余额数。
            remainder[maxId] = 0;
            //总的也要加1,为了判断是否总数是否相同,跳出循环。
            ++currentSum;
        }
        // 这时候的seats就会总数占比会100%
        return seats;
    }

例:

    public static void main(String[] args) {
        int arr[] = new int[]{1,4,3};
        final double[] percentValue = getPercentValue(arr);
        for (double v : percentValue) {
            System.out.println(new Double(v).intValue());
        }
    }

输出:

13
50
37

评论区
请写下您的评论...
暂无评论...
猜你喜欢
前端 1134 js:functiongetPercentValue(arr){//求和letsum=0;if(sum=0){for(leti=0;iarr.length;i++){sum
工具 5330 publicstaticvoidmain(String[]args){ inta=3;intb=9;NumberFormatnumberFormat=NumberFormat.getInstance();numberFormat.setMaximumFractionDigits(2);Stringresult=numberFormat.format((float)a/(float)b*100);S
数据结构与算法 1720 java使用欧几里得方法 publicstaticvoidmain(String[]args){ System.out.println(bili(2,6
official 928 交互一次时间。 七、利用率  利用率有道迎圣利驻迎圣两种。信道利用率指出某信道有之几时间是被利用(有数据通过)完点空闲信道利用率是零。网络利用率则是全网络信道而用率加权平均
official 1552 机组成原理》机系统层次结构机系统层次结构概念,目前较一致机系统层次结构如下图,其中左边是层次结构中各层次名字,右边是对应于不同层某种编程语言表现形式。机系统层次
official 862 包括以下两个部: 源点(source)源点设备产生要传输数据,例如,从键盘输入汉字,机产生输出数字特流。源点又称为源站,或信源。 发送器通常源点生成数字特流要通过发送器编码后
official 734 [TOC]一、速率  我们知道,机发送出信号都是数字形式特(bit)来源于binarydigit,意思是一个“二进制数字”,因此一个特就是二进制数字中一个1或0。特也是信息论中使用
official 1303 配时隙,而是按需动态地配时隙。因此统复用可以提高线路利用率。我们还可看出,在输出线路上,某一个用户时隙并不是周期性地出现。因此统复用又称为异步时复用,而普通复用称为同步时
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。