美团 java笔试
一共五道编程题
第一道题
给定一行数字,除了指定需要改变的符号外,其它的都用加法。每次只改变一个符号,请你输出每次改变符号后的结果。结果保留一位小数
输入:第一个参数代表一共有多少个数,第二行代表输入的数字,第三行代表一共做了几次符号替换,第五行分为两个部分,前面一个数字代表对第几个加号做改变,改变成后面的那个符号
输出:
11.0:3-5+2+5+6=11.0
24.0: 3+5*2+5+6=24.0
。。。
/** 输入: 5 3 5 2 5 6 3 1 - 2 * 3 / 输出: 11.0 24.0 14.4 */
第二道题
应该是属于签到题
输入一行数字,可以对其任意两个数字的位置交换,请你输出最小的 前一个数字减去后一个数字的差的绝对值的和
/** 输入: 5 2 5 72 4 6 输出: 70 */ public class Main2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n=sc.nextInt(); int[] nums=new int[n]; for (int i = 0; i < n; i++) { nums[i]=sc.nextInt(); } Arrays.sort(nums); long res=0; for (int i = 0; i < n - 1; i++) { res+=Math.abs(nums[i]-nums[i+1]); } System.out.println(res); } } }
第三道题
输入:
第一行第一个数字n代表有多少个收藏夹(收藏夹默认欣赏值为0),第二个数字m代表对收藏夹进行了m次操作
第二行opi代表第i次操作内容,0代表更新,1代表查询范围为[xi,yi]收藏夹里面的欣赏值得总和(x[i],y[i]就是后面两行的值)
第三行x[i],如果对于的opi为0的话,就代表把想x[i]收藏夹的欣赏值更新为y[i],如果对于的opi为1的话,就代表查询的左边界
第四行y[i], 如果对于的opi为0的话,就代表把想x[i]收藏夹的欣赏值更新为y[i],如果对于的opi为1的话,就代表查询的右边界
示例分析:
第一次opi=1,查询【1,3】(次数xi=1,yi=3)范围内的收藏夹的欣赏值的和,为0+0+0
第二次opi=0,更新1号收藏夹欣赏值为2
第三次opi=1,查询查询【1,3】范围内的收藏夹的欣赏值的和,为0+2+0
第四次opi=0,更新3号收藏夹欣赏值为5
第五次opi=1,查询查询【1,3】范围内的收藏夹的欣赏值的和,为0+2+5
第六次opi=0,更新4号收藏夹欣赏值为100
第七次opi=1,查询查询【1,3】范围内的收藏夹的欣赏值的和,为0+2+5
/** 输入: 4 7 1 0 1 0 1 0 1 1 1 1 3 1 4 1 3 2 3 5 3 100 3 输出: 0 2 7 7 */
第四题
我没做,感觉应该是动态规划
第五题
计算树节点的权重,如果该节点没有子节点,则权重为1,如果有子节点,且它是绿色,则它的权重为子节点权重的和,它是红色,则它的权重为子节点权重的异或
第一行 数字n代表一个有几个节点
第二行 从节点2开始,xi代表他们父节点是谁(根节点默认为1,且没有父节点)
第三行,数字yi代表它是绿色还是2是绿色,1是红色
/** 输入: 3 1 1 2 2 2 输出: 2 */
总结:除了签到题,我一道题都没有完整做出来,,都有没有通过的地方,感觉就是有思路,但是就是不能完全通过,为了过,加了很多if去尝试,但是没有用,应该是某些更细致的地方我不知道,而且错了它也不说是答案错了还是什么,就很难受