您的位置:首页 > 其它

2017华为实习生笔试题汇总

2017-07-02 11:47 239 查看
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
7d74
;
}

/**
* 判断是否为操作符
* @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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: