第一题:
import java.util.*;
/*搜狐已经累计拥有千万级别会员用户,会员成长值公式为:会员成长值=每天成长值+任务成长值。
*输入一组数组,第一行是n,表示接下来有n行数据输入,
*从第二行开始,如果第一个是1,则该行有4个数据,
*第一个1表示每日成长规则,第二个数字表示开始时间,第三个数字表示截止时间,第四个数字表示每日成长值。
*如果第一个数字是2,则该行总共有3个数字,第二个数字表示某一天做任务,第三个数字表示任务成长值。
*每日总的成长值=每日成长值+任务成长值;若每日成长值有多个,以最大的那个值为准。例如:
3
1 1 5 10
2 3 4
1 4 6 -5
输出49
*/
public class SystemDesign {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int sum = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0;i < n;i ++) {
int flag = s.nextInt(); //标识位,为1表示每天成长值,为2表示任务成长值
if(flag == 1) {
int start = s.nextInt();
int end = s.nextInt();
int base = s.nextInt();
for(int j = start;j <= end;j ++) {
if(map.containsKey(j)) {
int value = map.get(j);
if(base > value) { //若每日成长值有多个,以最大的那个值为准
map.put(j, base);
}
}
else {
map.put(j, base);
}
}
}
if(flag == 2) {
int key = s.nextInt();
int addValue = s.nextInt(); //任务成长值直接叠加
if(map.containsKey(key)) {
int value = map.get(key);
value += addValue;
map.put(key, value);
}
else {
map.put(key, addValue);
}
}
}
//求和
for(int i : map.values()) {
sum += i;
}
System.out.println(sum);
}
}
第二题:
import java.util.Arrays;
import java.util.Scanner;
/*
n个整数,输出最小的k个,
第一行输入n,k第二行输入n个整数,输出从小到大k个最小整数,并用逗号隔开。
如:
8 4
4 5 1 6 2 7 3 8
输出:
1,2,3,4
*/
public class PrintKMinValue {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNext()) {
int n = s.nextInt(); //数组长度
int k = s.nextInt(); //最小的k个数
int[] nums = new int[n];
for(int i = 0;i < n;i ++) {
nums[i] = s.nextInt();
}
Arrays.sort(nums);
for(int i = 0;i < k;i ++) {
if(i != k - 1) {
System.out.print(nums[i] + ",");
}
else {
System.out.print(nums[i]); //最后一个不需要输出,
}
}
}
}
}
2018搜狐春招后端开发实习题解
猜你喜欢
转载自blog.csdn.net/zhou15755387780/article/details/80649478
今日推荐
周排行