一、题解
1、
题目:
统计1到N(含)之间所有立方数的个数,并输出这个数目。
提示:立方数的个数,如8是2的立方数,27是3的立方数,9不是立方数。
输入说明:一个整数N(N<100000);
输出说明:立方数的个数
输入样例:200
输出样例:5
题解:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int index = 0;
for (int i = 1; i <= N; i++) {
if (isPow(i)) index++;
}
System.out.println(index);
scanner.close();
}
private static boolean isPow(int i){
if (i == 1)return true;
for (int j = 1; j < i/2; j++) {
if (Math.pow(j, 3) == i) return true;
}
return false;
}
}
2、
题目:
统计整数区间[N, M] (N,M<100000)中所有非偶数的合数个数,并输出这个数。
输入说明:两个整数N、M;
输出说明:非偶数的合数个数
输入样例:2 16
输出样例:2
题解:
import java.util.Scanner;
//所谓合数其实就是非素数
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int index = 0;
for (int i = N; i<= M; i++){
if (isJi(i)){
if (isHe(i))index++;
}
}
System.out.println(index);
scanner.close();
}
private static boolean isHe(int n){
for (int i=2;i<=(int)Math.sqrt(n);i++){
if (n%i==0) return true;
}
return false;
}
private static boolean isJi(int num){
return num%2 != 0;
}
}
3、
题目:
字母连连看,给定一个由小写英文字母组成的字符串(长度<1000),如果字符串中有两个连续的字母相同,则这两个字母可同时消除,并不断重复该操作,直到不能消除为止。请编程判断该字符串是否可以完全消除。
输入说明:一个字符串。
输出说明:如果可以完全消除,输出“YES”,如果不可以,输出消除后的结果。
输入样例1:abacddcaba
输出样例1:YES
输入样例2:asdfghhgf
输出样例2:asd
题解:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
char c1 = chars[i];
char c2 = chars[i+1];
if (c1 == c2){
char[] newChars = new char[chars.length-2];
for (int j = 0; j < chars.length-2; j++) {
if (j >= i){
newChars[j] = chars[j+2];
}else {
newChars[j] = chars[j];
}
}
chars = newChars;
i = -1;
}
}
StringBuffer sb = new StringBuffer();
if (chars.length == 0){
System.out.println("YES");
} else {
for (char aChar : chars) {
sb.append(aChar);
}
System.out.println(sb.toString());
}
scanner.close();
}
}
4、
题目:
由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间。一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出。
输入说明:第一行是两个整数N和K,第二行输入N个数,表示数组中的元素。
输出说明:最大Sk值
输入样例:8 2
12 23 27 34 19 17 45 8
输出样例:36
题解:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int K = scanner.nextInt();
int [] array = new int[N];
for (int i = 0; i < N; i++) {
array[i] = scanner.nextInt();
}
List<Integer> list = new ArrayList<>();
for (int i = 0; i < array.length - K; i++) {
int index = 0;
for (int j = 0; j < K; j++) {
if (isPrime(array[i+j])){
index+=array[i+j];
}
}
list.add(index);
}
System.out.println(Collections.max(list));
scanner.close();
}
private static boolean isPrime(int n){
for (int i=2;i<=(int)Math.sqrt(n);i++){
if (n%i==0) return false;
}
return true;
}
}
5、
题目:
仓库新进了几批物资,只知道每批物资的数量和单价,请编写程序,按照每种物资的总价值,由高到低次序输出。
输入说明:第1行 一个整数N,表明物资的批次数量
第2-N+1行,每批物资的类别、数量及单价,中间用空格隔开,其中类别用A-Z加以区分。
输出说明:按物资价值降序输出排序结果,每行输出一种物资。
输入样例:5
A 5 10.00
B 3 2.00
A 5 8.00
B 3 2.50
C 10 3.50
输出样例:A 90.00
C 35.00
B 13.50
题解:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
Map<String,Double> map = new TreeMap<>();
for (int i = 0; i < N; i++) {
String type = scanner.next();
int pi = scanner.nextInt();
double price = scanner.nextDouble();
double counts = pi * price;
Double aDouble = map.get(type);
if (aDouble != null){
counts+=aDouble;
}
map.put(type, counts);
}
Map<String, Double> stringDoubleMap = sortMap(map);
stringDoubleMap.forEach((x,y) -> {
System.out.print(x+" ");
System.out.printf("%.2f
", y);
});
scanner.close();
}
private static Map<String,Double> sortMap(Map<String,Double> map){
Map<String,Double> sortedMap = new LinkedHashMap<>();
List<Map.Entry<String,Double>> entries = new ArrayList<>(map.entrySet());
entries.sort(new MyComparator());
Iterator<Map.Entry<String,Double>> iterator = entries.iterator();
Map.Entry<String,Double> temp = null;
while(iterator.hasNext()){
temp = iterator.next();
sortedMap.put(temp.getKey(), temp.getValue());
}
return sortedMap;
}
static class MyComparator implements Comparator<Map.Entry<String,Double>> {
@Override
public int compare(Map.Entry<String, Double> o1, Map.Entry<String, Double> o2) {
return (int) (o2.getValue() - o1.getValue());
}
}
}
二、总结
总体来看题目难度不大,基本都可以暴力解决,但是暴力解决拿不到满分。目前存在的问题还是只会使用暴力,对一些算法的使用不熟练,还是想着快速解决。