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();
}
}