华为2019届校招笔试题
程序员文章站
2022-03-06 23:03:33
...
1.输入任意个字符串,将其中的小写字母变为大写,大写字母变为小写,其他字符不用处理
输入描述:abcd12#%XYZ
输出描述:ABCD12#%xyz
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String string = in.nextLine();
char[] ch = string.toCharArray();
for(int i = 0; i < string.length(); i++) {
if(ch[i] >= 'a' && ch[i] <= 'z') {
ch[i] = (char)(ch[i]-'a'+'A');
}
if(ch[i] >= 'A' && ch[i] <= 'Z') {
ch[i] = (char)(ch[i]-'A'+'a');
}
}
System.out.println(new String(ch));
}
}
asdj33&&%SI
asdj33&&%si
2.小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样,但是小偷的背包携带重量有限,所以他不得不在宝贝中做出选择,才能使偷盗的财富最大,请你帮助小偷计算一下。
输入描述:
- 宝贝价值:6,3,5,4,6
- 宝贝重量:2,2,6,5,4
- 小偷背包容量:10
输出描述:
- 偷到宝贝的总价值:15
示例1:
- 输入:
6,3,5,4,6
2,2,6,5,4
10
- 输出:15
分析:0-1背包问题
import java.util.Scanner;
public class Main {
static int[] value = new int[1000];
static int[] weight = new int[1000];
static int[][] got = new int[1000][1000];
static int len;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String v = in.nextLine();//价值
String w = in.nextLine();//重量
int cop = in.nextInt();//容量
getValues(value, v);
getValues(weight, w);
System.out.println(getMax(0,cop));
}
//将字符串存入数组中
static void getValues(int[] a, String s) {
String[] array = s.split(",");
len = array.length;
for(int i=0; i < len; i++ ) {
a[i] = array[i].charAt(0) - '0';
}
}
//获取最大的价值
static int getMax(int n, int c) {
if(got[n][c] != 0) {
return got[n][c];
}
if(n == len) {
return 0;
}
if(weight[n] <= c) {
return got[n][c] = Math.max(getMax(n+1, c),getMax(n+1, c-weight[n])+value[n]);
}
return got[n][c] = getMax(n+1, c);
}
}
可能这种更好理解一点:
package te;
import java.nio.file.spi.FileSystemProvider;
public class Main {
static int[] value = new int[1000];
static int[] weight = new int[1000];
static int[][] got = new int[1000][1000];
static int len;
public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
String v = "6,3,5,4,6";//价值
// System.out.println(v);
String w = "2,2,6,5,4";//重量
// System.out.println(w);
int cop = 10;//容量
getValues(value, v);
getValues(weight, w);
System.out.println("获得最大价值:"+getMax(value, weight, len, cop, got));
}
//将字符串存入数组中
static void getValues(int[] a, String s) {
String[] array = s.split(",");
len = array.length;
for(int i=0; i < len; i++ ) {
a[i] = array[i].charAt(0) - '0';
}
}
//获取最大的价值
static int getMax(int[] v, int[] w, int n, int c,int[][] got) {//n表示物品的个数
//采用从底到顶的方式来设置got[i][j]的值
//首先放w[n-1]
for(int j = 0; j <= c; j++) {
if(j<w[n-1]) {
got[n-1][j]=0;
}
else {
got[n-1][j]=v[n-1];
}
}
//接下来放剩下的n-1个物品
for(int i=n-2; i>=0; i--) {
for(int j=0;j<=c;j++) {
if(j<w[i]) {
got[i][j]=got[i+1][j];
}
else {
got[i][j]=got[i+1][j]>got[i+1][j-w[i]]+v[i]?got[i+1][j]:got[i+1][j-w[i]]+v[i];
}
}
}
System.out.println("数组:");
for(int i = 0;i < n; i++) {
for(int j = 0;j <= c; j++) {
System.out.printf("%-3d",got[i][j]);
}
System.out.println('\n');
}
return got[0][c];
}
}
数组:
0 0 6 6 9 9 12 12 15 15 15
0 0 3 3 6 6 9 9 9 10 11
0 0 0 0 6 6 6 6 6 10 11
0 0 0 0 6 6 6 6 6 10 10
0 0 0 0 6 6 6 6 6 6 6
获得最大价值:15
3.C++中的typedef好处很多,可以让标准化自己DIY的类型,为便于理解typedef能干啥,本题考查各种typedef后,某个自定义类型的最终形态是啥。
输入为两部分,共两行:
第一行是一堆typedef定义,标准C++语句,以分号结束,这里不用考虑struct/union这类,只需要考虑基本类型和指针。
第二行是指定某个自定义type
输出为该自定义type的最终形态
如输入:
typedef int INT;typedef INT** INTP;
INTP
则输出:int**
注意,如果有指针类型,则指针表达的*和前面的类型中级间隔一个空格,和编译器的输出保持一致;另外,如果第一行输入的语句是编译不过的,或者第二行选择的type在第一行中没有定义,则输出none
上一篇: 字符串反转
下一篇: poi 4.0.0 设置单元格背景颜色