【笔试】今日头条 形式化输出
2017-04-18 20:43
295 查看
题目
解答
import java.text.DecimalFormat;
import java.util.*;
public class Main {
public static void main(String[] args)
{
HashMap<String, String> rsStr = new HashMap<String, String>();
rsStr.put("11", "*");
rsStr.put("12", "*");
rsStr.put("13", "*");
rsStr.put("14", "*");
rsStr.put("15", "*");
rsStr.put("21", "***");
rsStr.put("22", " *");
rsStr.put("23", "***");
rsStr.put("24", "* ");
rsStr.put("25", "***");
rsStr.put("31", "***");
rsStr.put("32", " *");
rsStr.put("33", "***");
rsStr.put("34", " *");
rsStr.put("35", "***");
rsStr.put("41", "* *");
rsStr.put("42", "* *");
rsStr.put("43", "***");
rsStr.put("44", " *");
rsStr.put("45", " *");
rsStr.put("51", "***");
rsStr.put("52", "* ");
rsStr.put("53", "***");
rsStr.put("54", " *");
rsStr.put("55", "***");
rsStr.put("61", "***");
rsStr.put("62", "* ");
rsStr.put("63", "***");
rsStr.put("64", "* *");
rsStr.put("65", "***");
rsStr.put("71", "***");
rsStr.put("72", " *");
rsStr.put("73", " *");
rsStr.put("74", " *");
rsStr.put("75", " *");
rsStr.put("81", "***");
rsStr.put("82", "* *");
rsStr.put("83", "***");
rsStr.put("84", "* *");
rsStr.put("85", "***");
rsStr.put("91", "***");
rsStr.put("92", "* *");
rsStr.put("93", "***");
rsStr.put("94", " *");
rsStr.put("95", "***");
rsStr.put("01", "***");
rsStr.put("02", "* *");
rsStr.put("03", "* *");
rsStr.put("04", "* *");
rsStr.put("05", "***");
rsStr.put("+1", " ");
rsStr.put("+2", " * ");
rsStr.put("+3", "***");
rsStr.put("+4", " * ");
rsStr.put("+5", " ");
rsStr.put("-1", " ");
rsStr.put("-2", " ");
rsStr.put("-3", "***");
rsStr.put("-4", " ");
rsStr.put("-5", " ");
rsStr.put("*1", " ");
rsStr.put("*2", "* *");
rsStr.put("*3", " * ");
rsStr.put("*4", "* *");
rsStr.put("*5", " ");
rsStr.put("/1", " ");
rsStr.put("/2", " *");
rsStr.put("/3", " * ");
rsStr.put("/4", "* ");
rsStr.put("/5", " ");
rsStr.put("=1", " ");
rsStr.put("=2", "****");
rsStr.put("=3", " ");
rsStr.put("=4", "****");
rsStr.put("=5", " ");
rsStr.put(".1", " ");
rsStr.put(".2", " ");
rsStr.put(".3", " ");
rsStr.put(".4", "**");
rsStr.put(".5", "**");
Scanner sc = new Scanner(System.in);
String inStr = sc.nextLine().replace(" ", "");
double rs = calculate(toSuffix(inStr));
if(rs % 1 == 0)
{
int rs1 = (int)rs;
inStr = inStr + "=" + rs1;
}else{
String rs2 = "" + rs;
int index = rs2.indexOf('.');
if(rs2.length() < index + 3)
inStr = inStr + "=" + rs;
else
{
DecimalFormat df = new DecimalFormat("######0.00");
inStr = inStr + "=" + df.format(rs);
}
}
char[] inStrArr = inStr.toCharArray();
String outStr = "";
for(int i = 1; i <= 5; i++)
{
for(int j = 0; j < inStrArr.length; j++)
{
switch(inStrArr[j])
{
case '1':
outStr += rsStr.get("" + '1' + i);
break;
case '2':
outStr += rsStr.get("" + '2' + i);
break;
case '3':
outStr += rsStr.get("" + '3' + i);
break;
case '4':
outStr += rsStr.get("" + '4' + i);
break;
case '5':
outStr += rsStr.get("" + '5' + i);
break;
case '6':
outStr += rsStr.get("" + '6' + i);
break;
case '7':
outStr += rsStr.get("" + '7' + i);
break;
case '8':
outStr += rsStr.get("" + '8' + i);
break;
case '9':
outStr += rsStr.get("" + '9' + i);
break;
case '0':
outStr += rsStr.get("" + '0' + i);
break;
case '+':
outStr += rsStr.get("" + '+' + i);
break;
case '-':
outStr += rsStr.get("" + '-' + i);
break;
case '*':
outStr += rsStr.get("" + '*' + i);
break;
case '/':
outStr += rsStr.get("" + '/' + i);
break;
case '=':
outStr += rsStr.get("" + '=' + i);
break;
case '.':
outStr += rsStr.get("" + '.' + i);
break;
}
if(j != inStrArr.length - 1)
outStr += " ";
}
outStr += "\r\n";
}
System.out.println(outStr);
}
public static List<Object> toSuffix(String s) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("+", 0);
map.put("-", 0);
map.put("*", 1);
map.put("/", 1);
List<Object> list = new ArrayList<Object>();
String[] number = s.split("[^\\d]");
String[] operator = s.split("\\d+");
Stack<String> stack = new Stack<String>();
for (int i = 0; i < number.length; i++) {
if (operator[i].length() != 0) {
while (!stack.isEmpty()
&& map.get(operator[i]) <= map.get(stack.peek())) {
list.add(stack.pop());
}
stack.push(operator[i]);
}
list.add(Double.parseDouble(number[i]));
}
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
public static double calculate(List<Object> list) {
Stack<Double> stack = new Stack<Double>();
for (Object obj : list) {
if (obj instanceof Double) {
stack.push((Double) obj);
} else {
double b = stack.pop();
double a = stack.pop();
if (obj.equals("+"))
stack.push(a + b);
if (obj.equals("-"))
stack.push(a - b);
if (obj.equals("*"))
stack.push(a * b);
if (obj.equals("/"))
stack.push(a / b);
}
}
return stack.pop();
}
}
解答
import java.text.DecimalFormat;
import java.util.*;
public class Main {
public static void main(String[] args)
{
HashMap<String, String> rsStr = new HashMap<String, String>();
rsStr.put("11", "*");
rsStr.put("12", "*");
rsStr.put("13", "*");
rsStr.put("14", "*");
rsStr.put("15", "*");
rsStr.put("21", "***");
rsStr.put("22", " *");
rsStr.put("23", "***");
rsStr.put("24", "* ");
rsStr.put("25", "***");
rsStr.put("31", "***");
rsStr.put("32", " *");
rsStr.put("33", "***");
rsStr.put("34", " *");
rsStr.put("35", "***");
rsStr.put("41", "* *");
rsStr.put("42", "* *");
rsStr.put("43", "***");
rsStr.put("44", " *");
rsStr.put("45", " *");
rsStr.put("51", "***");
rsStr.put("52", "* ");
rsStr.put("53", "***");
rsStr.put("54", " *");
rsStr.put("55", "***");
rsStr.put("61", "***");
rsStr.put("62", "* ");
rsStr.put("63", "***");
rsStr.put("64", "* *");
rsStr.put("65", "***");
rsStr.put("71", "***");
rsStr.put("72", " *");
rsStr.put("73", " *");
rsStr.put("74", " *");
rsStr.put("75", " *");
rsStr.put("81", "***");
rsStr.put("82", "* *");
rsStr.put("83", "***");
rsStr.put("84", "* *");
rsStr.put("85", "***");
rsStr.put("91", "***");
rsStr.put("92", "* *");
rsStr.put("93", "***");
rsStr.put("94", " *");
rsStr.put("95", "***");
rsStr.put("01", "***");
rsStr.put("02", "* *");
rsStr.put("03", "* *");
rsStr.put("04", "* *");
rsStr.put("05", "***");
rsStr.put("+1", " ");
rsStr.put("+2", " * ");
rsStr.put("+3", "***");
rsStr.put("+4", " * ");
rsStr.put("+5", " ");
rsStr.put("-1", " ");
rsStr.put("-2", " ");
rsStr.put("-3", "***");
rsStr.put("-4", " ");
rsStr.put("-5", " ");
rsStr.put("*1", " ");
rsStr.put("*2", "* *");
rsStr.put("*3", " * ");
rsStr.put("*4", "* *");
rsStr.put("*5", " ");
rsStr.put("/1", " ");
rsStr.put("/2", " *");
rsStr.put("/3", " * ");
rsStr.put("/4", "* ");
rsStr.put("/5", " ");
rsStr.put("=1", " ");
rsStr.put("=2", "****");
rsStr.put("=3", " ");
rsStr.put("=4", "****");
rsStr.put("=5", " ");
rsStr.put(".1", " ");
rsStr.put(".2", " ");
rsStr.put(".3", " ");
rsStr.put(".4", "**");
rsStr.put(".5", "**");
Scanner sc = new Scanner(System.in);
String inStr = sc.nextLine().replace(" ", "");
double rs = calculate(toSuffix(inStr));
if(rs % 1 == 0)
{
int rs1 = (int)rs;
inStr = inStr + "=" + rs1;
}else{
String rs2 = "" + rs;
int index = rs2.indexOf('.');
if(rs2.length() < index + 3)
inStr = inStr + "=" + rs;
else
{
DecimalFormat df = new DecimalFormat("######0.00");
inStr = inStr + "=" + df.format(rs);
}
}
char[] inStrArr = inStr.toCharArray();
String outStr = "";
for(int i = 1; i <= 5; i++)
{
for(int j = 0; j < inStrArr.length; j++)
{
switch(inStrArr[j])
{
case '1':
outStr += rsStr.get("" + '1' + i);
break;
case '2':
outStr += rsStr.get("" + '2' + i);
break;
case '3':
outStr += rsStr.get("" + '3' + i);
break;
case '4':
outStr += rsStr.get("" + '4' + i);
break;
case '5':
outStr += rsStr.get("" + '5' + i);
break;
case '6':
outStr += rsStr.get("" + '6' + i);
break;
case '7':
outStr += rsStr.get("" + '7' + i);
break;
case '8':
outStr += rsStr.get("" + '8' + i);
break;
case '9':
outStr += rsStr.get("" + '9' + i);
break;
case '0':
outStr += rsStr.get("" + '0' + i);
break;
case '+':
outStr += rsStr.get("" + '+' + i);
break;
case '-':
outStr += rsStr.get("" + '-' + i);
break;
case '*':
outStr += rsStr.get("" + '*' + i);
break;
case '/':
outStr += rsStr.get("" + '/' + i);
break;
case '=':
outStr += rsStr.get("" + '=' + i);
break;
case '.':
outStr += rsStr.get("" + '.' + i);
break;
}
if(j != inStrArr.length - 1)
outStr += " ";
}
outStr += "\r\n";
}
System.out.println(outStr);
}
public static List<Object> toSuffix(String s) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("+", 0);
map.put("-", 0);
map.put("*", 1);
map.put("/", 1);
List<Object> list = new ArrayList<Object>();
String[] number = s.split("[^\\d]");
String[] operator = s.split("\\d+");
Stack<String> stack = new Stack<String>();
for (int i = 0; i < number.length; i++) {
if (operator[i].length() != 0) {
while (!stack.isEmpty()
&& map.get(operator[i]) <= map.get(stack.peek())) {
list.add(stack.pop());
}
stack.push(operator[i]);
}
list.add(Double.parseDouble(number[i]));
}
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
public static double calculate(List<Object> list) {
Stack<Double> stack = new Stack<Double>();
for (Object obj : list) {
if (obj instanceof Double) {
stack.push((Double) obj);
} else {
double b = stack.pop();
double a = stack.pop();
if (obj.equals("+"))
stack.push(a + b);
if (obj.equals("-"))
stack.push(a - b);
if (obj.equals("*"))
stack.push(a * b);
if (obj.equals("/"))
stack.push(a / b);
}
}
return stack.pop();
}
}
相关文章推荐
- 今日头条笔试题-形式化算式
- 【今日头条2017内推笔试题】二维平面整数点集
- 算法与数据结构——今日头条笔试题
- 今日头条笔试
- 今日头条笔试题:“最小数字*区间和”的最大值【单调栈】
- 【今日头条2017内推笔试题】数组序列
- 今日头条3月24笔试题java实现
- 今日头条2018春招研发岗笔试题目
- 今日头条笔试之手串问题
- 2017年4月18日今日头条笔试原题C题
- 今日头条2018春季校园招聘研发岗位笔试编程题4
- 串珠问题(今日头条笔试)
- 20170330今日头条笔试题
- 今日头条春招研发笔试题解密
- Trie树/字典树题目(2017今日头条笔试题:异或)
- 2018今日头条笔试(第二题)
- 今日头条2018笔试第二题
- 2017年4月18日今日头条笔试原题D题
- 算法面试题-今日头条2017客户端工程师实习生笔试题4:或与加
- 2018今日头条3.24笔试题目2