CF 368A.Sereja and Coat Rack(Java实现)
问题分析
简而言之,小明要邀请m个绅士到家,家里有n个挂衣钩,一个挂衣钩要支付i元,如果挂衣钩不够了就要给每个绅士赔d元
思路分析
所以思路就很清楚了,获取n,d,m的值,并用数组存放每个挂衣钩的钱,如果m<=n,那就大赚,如果m>n,那就要赔付(m-n)*d
代码
import java.util.*;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc =new Scanner(System.in);
int n= sc.nextInt();//存入n
int d= sc.nextInt();//存入d
sc.nextLine();//吞回车
int[] arr=new int[n];//用于存钩子的价格
for (int i=0;i<n;i++){
arr[i]= sc.nextInt();//存入
}
sc.nextLine();//吞回车
int m=sc.nextInt();//存入m
int re=0;//初始化答案
Arrays.sort(arr);//从小到大排序,如果有3个钩子,但只有1位绅士,他肯定选择最便宜的钩子
if (m>n){//如果m>n说明钩子不够
for (int i=0;i<n;i++){//此处上限是n
re+=arr[i];//先算能赚多少
}
re-=d*(m-n);//再计算要赔多少
} else if (m<=n) {//钩子够的情况
for (int i=0;i<m;i++){
re+=arr[i];//那就算从小到大用m个钩子能赚多少
}
}
System.out.println(re);//输出答案
}
}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。