2017华为实习生笔试题汇总

1、字符串大小写转换:写出一个程序,输入一个字符串,然后输出大写转换为小写之后的字符串。不在字母范围内的字符,需丢弃。例如1:输入:ABC,输出:abc;例如2:输入:AbC输出:abc。

第一道题很简单,直接上代码:

public class StringUpperLower 
{
	public static void main(String[] args) 
	{
		Scanner in = new Scanner(System.in);
		while(in.hasNext())
		{
			String s = in.nextLine();
			StringBuilder sb = new StringBuilder();//存储转换后的结果
			for(int i=0;i<s.length();i++)
			{
				char c = s.charAt(i);
				if(c >= 'A' && c <= 'Z')
					sb.append((char)(c+32));
				else if(c >= 'a' && c <= 'z')
					sb.append(c);
			}
			System.out.println(sb);
		}
		in.close();
	}
}
2、集五福:以0和1组成的长度为5的字符串代表每个人所得到的福卡,每一位代表一种福卡,1表示已经获得该福卡,单类型福卡不超过一张,随机抽取一个小于10人团队,求该团队最多可以集齐多少套五福。

输入描述:输入若干个“11010”,“00110”的由0,1组成的长度等于5的字符串,代表指定团队中每个人福卡获得情况,
注:1人也可以是一个团队;1人可以有0-5张福卡,但福卡不能重复。
输出描述:输出该团队能凑齐多少套五福。

public class FiveBlissColection 
{
	public static void main(String[] args) 
	{
		Scanner in = new Scanner(System.in);
		while(in.hasNext())
		{
			String s = in.nextLine();
			int len = s.length();
			int[] count = new int[5];
			for(int i=0;i<5;i++)
			{
				for(int j=0;j<len/5;j++)
					count[i] += s.charAt(5*j+i)-48;
			}
			int min = Integer.MAX_VALUE;
			for(int i=0;i<5;i++)
			{
				if(count[i] < min)
					min = count[i];
			}
			System.out.println(min);
		}
		in.close();
	}
}
3、后序表达式计算:

写一个postfixCalc函数,该函数根据输入的后缀表达式方式的字符串,输出计算的结果。例如:postfixCalc(32+5-)==0.

输入描述:输入的字符串中包含0~9和A~F(大写字母,A代表10,B代表11,C代表12...)代表参与运算的数字,运算符为+、-、*、/
  可以假定输入总是正确的表达式,不需要进行异常判断。
输出描述:通过函数返回输出结果。

public class PostfixCalculator 
{
	//定义操作符常量
	private static final char PLUS = '+';
	private static final char MINUS = '-';
	private static final char MULTIPLY = '*';
	private static final char DIVIDE = '/';

	private Stack<Integer> stack;
	
	public PostfixCalculator()
	{
		stack = new Stack<Integer>();
	}

	/**
	 * 计算后缀表达式的结果
	 * @param expression 后缀表达式的字符串表示形式
	 * @return 表达式的计算结果
	 */
	public int postfixCalc(String expression) 
	{
		int op1,op2,result = 0;	//临时变量,保存操作符和中间结果
		char token;	//字符
		for(int i=0;i<expression.length();i++)	//循环获取每一个字符
		{
			token = expression.charAt(i);
			if(isOperator(token))	//如果是操作符,就弹出
			{
				op2 = (stack.pop()).intValue();
				op1 = (stack.pop()).intValue();
				result = calculateSingleOperator(token,op1,op2);	//计算中间结果
				stack.push(result);	//将中间结果压入栈
			}
			else if(token>='0' && token<='9')	//字符为0~9之间的数字,直接入栈
				stack.push((int)(token-'0'));
			else if(token>='A' && token<='F')
				stack.push((int)(token-'A'+10));//字符为A~F之间的大写字母,将其转换为相应的数字再入栈
		}
		return result;
	}

	/**
	 * 计算每一部分的表达式
	 * @param operator 操作符
	 * @param op1 中间变量,操作符左边
	 * @param op2 中间变量,操作符右边
	 * @return 中间结果
	 */
	private int calculateSingleOperator(char operator, int op1, int op2)
	{
		int result = 0;
		//分情况计算
		switch (operator) 
		{
		case PLUS:
			result=op1+op2;
			break;
		case MINUS:
			result=op1-op2;
			break;
		case MULTIPLY:
			result=op1*op2;
			break;
		case DIVIDE:
			result=op1/op2;
			break;
		}
		return result;
	}

	/**
	 * 判断是否为操作符
	 * @param token 字符
	 * @return
	 */
	private boolean isOperator(char token) 
	{
		return (token==PLUS || token==MINUS || token==MULTIPLY || token==DIVIDE);
	}

	public static void main(String[] args) 
	{
		PostfixCalculator test = new PostfixCalculator();
		Scanner in = new Scanner(System.in);
		while(in.hasNext())
		{
			System.out.println(test.postfixCalc(in.nextLine()));
		}
		in.close();		
	}
}


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值