注意:输入的指数并不是排好序的,且可能两个系数相加为0需要移除。题中让输出一位小数,就都一位小数就行了,我当时还多此一举的将不是小数的变为整数,结果还错误,所以这告诉我们有时候别想太多。
提交代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input=new Scanner(System.in);
int epoch=2;
double[] sum=new double[1001];
while(epoch!=0)
{
int K=input.nextInt();
while(K!=0)
{
int exponents=input.nextInt();
double coefficients=input.nextDouble();
sum[exponents]=sum[exponents]+coefficients;
K=K-1;
}
epoch=epoch-1;
}
int count=0;
for(int i=0;i<sum.length;i++)
{
if(sum[i]!=0)
{
count=count+1;
}
}
System.out.print(count);
for(int i=sum.length-1;i>=0;i--)
{
if(sum[i]!=0)
{
System.out.printf(" %d %.1f",i, sum[i]);
}
}
}
}
上网查找了一下别人的想法,觉得这篇博客所用的java函数需要了解,读者可以借鉴其中思想,下面本文列出一些附注释的函数使用方法:
需要
import java.math.BigDecimal;
(1)
HashMap<Integer, Double> mapC = new HashMap<>();//相当于python中字典的创建
(2)
mapC.put(a, b);//放入字典
(3)
if (mapC.containsKey(a) && (mapC.get(a) + b == 0)) {//如果字典中包含此键值且该键在字典中对应的值与新输入的值相加为0
mapC.remove(a);//则将该键及对应的值从字典中移出
continue;
(4)
BigDecimal bg = new BigDecimal(sum);//BigDecimal,用来对超过16位有效位的数进行精确的运算
sum = bg.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();//setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入为一位小数,2.35变成2.4
mapC.put(a, sum);
(5)
Object[] key = mapC.keySet().toArray();//获取字典中的键值,并从Object形式转换为数组Array形式
Arrays.sort(key);//对键值进行排序
end~