欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华为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

相关标签: 华为