2017百度春招编程题

第一题:

度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。

度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?

输入包括两行:

第一行为 N

第二行为对应帽子的价格

例如

10

10 10 10 20 20 30 40 40 50 60

输出

30

这道题比较简单,进行排序后取第三便宜的价格即可,当然需要考虑不存在第三便宜元素的情况

具体代码:

import java.util.Arrays;
import java.util.Scanner;

/**
 * 
 * @author luzi
 *
 */
public class getTheThird {
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] arr = new int[n];
		for(int i = 0;i < n; i++){
			arr[i] = scan.nextInt();
		}
		Arrays.sort(arr);
		int count = 1;
		int price = 0;
		for(int i = 1;i < n; i++){
			if(arr[i] != arr[i-1])
				count++;
			if(count == 3){
				price = arr[i];
				break;
			}
		}
		if(count == 3)
			System.out.println(price);
		else
			System.out.println(-1);
	}

}


第二题:

* 一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
* 但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离? 
* 输入描述:
* 输入一个正整数N, N <= 50。


* 接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
* 输出描述:
* 输出一个整数表示度度熊最少需要走的距离。
* 输入例子:
* 4
* 1 4 -1 3
* 输出:
* 4

 我的想法比较简单:先统计所有坐标都要走的情况下所需要走的距离 sum ,接着我们找出那个跟前后坐标的距离和max最大的坐标 f

将这个坐标去掉,则将 sum 减去 max,并加上 f 的前一个坐标到   的下一个坐标的距离 p.

具体代码:

public class getMinDistance {
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] arr = new int[n];
		for(int i = 0;i < n; i++){
			arr[i] = scan.nextInt();
		}
		if(n == 1)
			System.out.println(arr[0]);
		if(n == 2)
			System.out.println(Math.abs(arr[0] - arr[1]));
		if(n > 2){
			int sum = 0;
			int max = 0;
			int p = 0;
			for(int i = 0;i < n-1;i++){
				sum += Math.abs(arr[i] - arr[i+1]);
			}
			for(int i = 1;i < n - 1;i++){
				int temp = Math.abs(arr[i] - arr[i-1]) + Math.abs(arr[i+1] - arr[i]);
				if(temp > max){
					max = temp;
					p = Math.abs(arr[i-1] - arr[i+1]);
				}
			}
			System.out.println(sum - max + p);
		}
		
	}

}


第三题:

三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示。 
现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。 

输入描述:
首先输入一个正整数N三维坐标系内的点的个数.(N <= 50) 

接下来N行,每一行输入 c x y z,c为'R', 'G', 'B' 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)


输出描述:
输出一个数表示最大的三角形面积,保留5位小数。

输入例子:
5
R 0 0 0
R 0 4 0
R 0 0 3
G 92 14 7
G 12 16 8

输出例子:
6.00000
我没有做出来,先留着有时间做出来再码

第四题:

度度熊有一个N个数的数组,他想将数组从大到小排好序,但是萌萌的度度熊只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序? 

输入描述:
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)


输出描述:
输出一个整数表示最少的操作次数。

输入例子:
4
19 7 8 25

输出例子:
2


用一个辅助数组对所有元素进行排序,从小到大排序,从第一个排好序的元素开始,
即最小的元素开始与没排好序数组元素比较,检查有多少个已经是从最小到大相对π好序的,
位置可以不连续,但是大的元素必须在小的元素后面,而且统必须是从第一个元素开始到第二个,第三个......
统计出一共有 count个,这些元素是不需要移动的元素,一共有 n 个元素,所以需要移动 n - count 次
具体代码:
public class sortTheArr {
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] arr = new int[n];
		int[] sortArr = new int[n];
		for(int i = 0;i < n; i++){
			arr[i] = scan.nextInt();
			sortArr[i] = arr[i];
		}
		Arrays.sort(sortArr);
		int count = 0;
		int j = 0;
		for(int i = 0;i < n; i++){
			if(arr[i] == sortArr[j]){
				count++;
				j++;
			}				
		}
		System.out.println(n - count);	
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值