Pat 甲级1002 A+B for Polynomials (Java实现)

题意:

        1.对指数exponent相同的内容,把他们的coefficient进行相加.

        2.按照输入格式输出内容,以指数从大到小来排序

        3.系数最终值为0则抹去这一项

        4.保留一位小数(不用四舍五入)

注意:

        1.两个指数相同的最终只可以保留为个指数,如:

                输入:2 2 2.4 1 4.3

                        2 2 2.6 1 4.7 0 3.4

                输出: 3 2 5.0 1 9.0 0 3.4

        2.系数为0则该项不用计入最终的内容数K

代码如下:

import java.util.Scanner;
import java.util.HashMap;
import java.util.Collection;
import java.text.DecimalFormat;

public class Main {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat(".0");//格式化输出
        int MaxCount = 0;//记录最大值,方便之后的遍历
        
        Scanner scanner = new Scanner(System.in);
        String string1 = scanner.nextLine();
        String string2 = scanner.nextLine();
        //按空格分割字符串,并创建数组
        String[] numbers1 = string1.split("\\s+");
        String[] numbers2 = string2.split("\\s+");

        //健是存exponents(指数)的,值是存coefficients(系数)的.
        HashMap<Integer,Double> map= new HashMap<>();
        for(int a = 1;a<numbers1.length;a+=2){//前是指数,后是系数.分别按key和value存入.
            int key =Integer.parseInt(numbers1[a]);//String===>Integer
            double value = Double.parseDouble(numbers1[a+1]);//String===>Double
            if(map.containsKey(key)){//如果已经存在这个指数时,对系数进行相加
                value = map.get(key)+value;
                map.replace(key,value);//修改对应位置的值
            }else{
                map.put(key,value);//如果没有存在就添加
            }
            if(a==1) MaxCount = key;//依题意,N1>N2>N3>.......>Nk所以取第一个值即可知道它是这组内容最大的值
        }
        for(int a = 1;a<numbers2.length;a+=2){//与上同理
            int key =Integer.parseInt(numbers2[a]);
            double value = Double.parseDouble(numbers2[a+1]);
            if(map.containsKey(key)){
                value = map.get(key)+value;
                map.replace(key,value);
            }else{
                map.put(key,value);
            }
            if(a==1){
                MaxCount = key>MaxCount?key:MaxCount;//比较上下两个谁大,就取谁.
            }
            
        }
        
        int count=map.size();//map总大小
        Collection<Double> v = map.values();//遍历value用的
        for(Double d :v){//如果出现系数为0的情况就减一
            if(d==0.0){
                count--;
            }
        }
        
        System.out.print(count);
        for(int a = MaxCount;a>=0;a--){
            if(map.containsKey(a)){
                if(map.get(a)==0) continue;//跳过输出系数为零的一项
                else System.out.print(" "+a+" "+df.format(map.get(a)));//格式化输出
            }
        }
        System.out.println("");
    }
}

感谢大家的观看!

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值