第一题:
度度熊想去商场买一顶帽子,商场里有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
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);
}
}