2016编程之美初赛时的两道试题
来源:互联网 发布:java系统技术架构图 编辑:程序博客网 时间:2024/06/03 04:17
编程之美初赛是在codeHunt上进行的,就是给一些输入和输出让后让你猜要做什么然后编程实现,通过测试用例即可
第一道要实现的是消除字符串前后的空格,中间的空格如果有多个替换成一个,由空格隔开的字符串序列倒序输出,比如" LLTTL TLT LTLT "经过转化后的结果应该是
"LTTLL TLT TLTL",代码实现如下:
public class Program3 { public static String Puzzle(String s) { List<Integer> emptyPos = new ArrayList<Integer>(); for (int i=0; i<s.length(); ++i) { if (s.charAt(i) == ' ') emptyPos.add(i); } StringBuilder resultBuilder = new StringBuilder(s.length()); if (emptyPos.size() == 0) { for (int i=s.length() - 1; i>=0; --i) resultBuilder.append(s.charAt(i)); return resultBuilder.toString(); } else { int lastPos = emptyPos.get(0); if (lastPos != 0) { for (int i=lastPos -1; i>=0; --i) resultBuilder.append(s.charAt(i)); resultBuilder.append(' '); } for (int count=1; count<emptyPos.size() - 1; ++count) { int nextPos = emptyPos.get(count); for (int i=nextPos - 1; i>lastPos; --i) resultBuilder.append(s.charAt(i)); resultBuilder.append(' '); lastPos = nextPos; } int finalPos = emptyPos.get(emptyPos.size() - 1); for (int i = s.length() - 1; i>finalPos; --i) resultBuilder.append(s.charAt(i)); return resultBuilder.toString(); } } public static void main(String[] args) { System.out.println(Puzzle("1T sd")); System.out.println(Puzzle(" LLTT LLTL TLLTLTLT ")); }}
public class Program { private static final int T = -1; private static final int _1 = 1; private static final int _0 = 0; public static String Puzzle(String a, String b) { String shortOne = a.length() > b.length() ? b : a; String longerOne = shortOne == a ? b : a; StringBuilder result = new StringBuilder(a.length() + b.length()); int carryBit = _0; for (int count = 0; count < longerOne.length(); ++count) { char c1 = longerOne.charAt(longerOne.length() - 1 - count); char c2; if (count < shortOne.length()) c2 = shortOne.charAt(shortOne.length() - 1 - count); else c2 = '0'; int[] addResult = addChar(c1, c2, carryBit); carryBit = addResult[1]; result.append(toCharValue(addResult[0])); } if (carryBit != _0) result.append(toCharValue(carryBit)); return reverseAndSlim(result); } private static int[] addChar(char c1, char c2, int carryBit) { int[] addResult = addChar(c1, c2); int[] addCarryBitResult = addOpValue(addResult[0], carryBit); return new int[]{addCarryBitResult[0], addResult[1] + addCarryBitResult[1]}; } private static String reverseAndSlim(StringBuilder result) { int noneZeroPos = result.length() - 1; while (noneZeroPos >= 0) { if (result.charAt(noneZeroPos) != '0') break; noneZeroPos--; } char[] slimResult = new char[noneZeroPos + 1]; for (int i=0; i<=noneZeroPos; ++i) slimResult[i] = result.charAt(noneZeroPos - i); return new String(slimResult); } private static int toOpValue(char c) { if (c == '1') return _1; else if (c == 'T') return T; else return _0; } private static char toCharValue(int opValue) { if (opValue == _1) return '1'; else if (opValue == T) return 'T'; else return '0'; } private static int[] addOpValue(int op1, int op2) { int result = op1 + op2; int carryBit; if (result == T + T) { result = _1; carryBit = T; } else if (result == _1 + _1) { result = T; carryBit = _1; } else { carryBit = _0; } return new int[]{result, carryBit}; } private static int[] addChar(char c1, char c2) { int op1 = toOpValue(c1); int op2 = toOpValue(c2); return addOpValue(op1, op2); } public static void main(String[] args) { System.out.println(Puzzle("111", "TTT")); System.out.println(Puzzle("1101", "10T")); System.out.println(Puzzle("1T01", "10T")); System.out.println(Puzzle("T", "0")); System.out.println(Puzzle("T", "0T")); System.out.println(Puzzle("T", "0110")); System.out.println(Puzzle("T", "011T0")); System.out.println(Puzzle("T", "0110TT")); System.out.println(Puzzle("T0TT1011", "11")); }}
希望能摸到西决地板!
0 0
- 2016编程之美初赛时的两道试题
- 编程之美 2013 初赛
- 编程之美初赛-焦距
- 编程之美初赛-焦距
- 编程之美初赛前两题
- 2015编程之美初赛
- 编程之美初赛B
- 编程之美大赛初赛的一点整理
- 编程之美初赛第二场 神奇的数列
- hihoCoder #1156 : 彩色的树 2015编程之美初赛
- 2013编程之美 初赛 传话游戏
- 编程之美-初赛第二场
- 编程之美 初赛第一场 竞价
- 编程之美初赛第一场 焦距
- 编程之美初赛第一场 树
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场 焦距
- 编程之美初赛第一场 树
- 计算机书目推荐
- Jquery attr与prop区别
- 解析 xml 空格错误
- 2016-4-26 早
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- 2016编程之美初赛时的两道试题
- 第十一章 无熟人难办事—迪米特法则
- 二维码的扫描和生成二维码
- 大数据编程语言 R、Python、Scala 和 Java
- Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解
- iOS开发系列--打造自己的“美图秀秀”
- WinDBG 指令整理
- 大三的看法
- MR在window下打.jar包的过程