<一>、字母倒着输出
题目描述:
给定一组字符串,然这组字符串中的字母按照倒着的顺序输出,空格保留。
例如:
输入:
i am a student
输出:
student am i
代码如下:
import java.util.Scanner;
public class Main4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strs = str.split(" ");
StringBuffer sb = new StringBuffer();
for(int i = strs.length - 1;i >= 0;i--) {
sb = sb.append(strs[i]).append(" ");
}
System.out.println(sb.toString());
}
}
<二>寻找最小数的字串
题目描述:
给定一组数组,用逗号分隔,求得到这组数组中数组成的最小数字。
例如:
输入:
21,321
输出;
21321
代码如下:
package com.ymm.core.b;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strs = str.split(",");
printNum(strs);
}
private static void printNum(String[] strs) {
ArrayList<String> list = new ArrayList<>();
for(String s : strs) {
list.add(s);
}
Collections.sort(list,new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String str1 = s1 + s2;
String str2 = s2 + s1;
return str1.compareTo(str2);
}
});
StringBuffer sb = new StringBuffer();
for(String j : list) {
sb.append(j);
}
System.out.println(sb.toString());
}
}
<三>背包问题
题目描述
有为N件物品,它们的重量w分别是w1,w..,wn,它们的价值v分别是1.,.....,每件物品数量有且仅有一个, 现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
输入描述:
物品数量N=5件
重量W分别为:2 2 6 5 4
物品价值为:3 6 9 5 6
背包数量为:10
输出描述:
最大价值为:18
代码如下:
package com.ymm.core.b;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); //物品的数量
int W = in.nextInt(); //背包的容量
int[] weight = new int[N + 1];//物品的重量
int[] value = new int[N + 1];//物品的价值
for(int i = 1;i <= N;i++) {
weight[i] = in.nextInt();
}
for(int i = 1;i <= N;i++) {
value[i] = in.nextInt();
}
int[][] maxVal = new int[N + 1][W + 1]; // 最大价值
int[] a = new int[N + 1];//判断
for(int i =1;i <= W;i++) {
for(int j = 1;j <= N;j++) {
if(i >= weight[j]) {
//f[i][j] = max(f[i-1][j], f[i-1][j-Vi] + Wi)
//Vi表示第i件物体的体积,Wi表示第i件物品的价值。这样f[i-1][j]代表的就是不将这件物品放入背包
//而f[i-1][j-Vi] + Wi则是代表将第i件放入背包之后的总价值,比较两者的价值,
//得出最大的价值存入现在的背包之中
maxVal[j][i] = Math.max(maxVal[j - 1][i - weight[j]] + value[j],
maxVal[j - 1][i]);
}else{
//前j个物体
maxVal[j][i] = maxVal[j - 1][i];
}
}
}
int n = W;
for(int i = N;i > 0;i--) {
if(maxVal[i][n] == maxVal[i - 1][n]) {
a[i] = 0;
}else {
a[i] = 1;
n = n - weight[i];
}
}
System.out.println("取得最大价值:" + maxVal[N][W]);
}
}