样例输出: A4B4
参考答案:
import java.util.Scanner; public class Main { public static void main(String[] args){ int count = 1; Scanner in = new Scanner(System.in); String s = in.next(); in.close(); char[] chS = s.toCharArray(); if (chS.length > 128){ System.out.println("Length of input string out of bound"); return; } StringBuffer compactS = new StringBuffer(""); compactS.append(chS[0]); for (int i = 1; i < chS.length; i++){ if (chS[i] == chS[i-1]){ count++; } else{ if (count>1){ compactS.append(count); } compactS.append(chS[i]); count = 1; } } if (count>1){ compactS.append(count); //这是最后一个字母连续出现的个数 } System.out.println(compactS); } }
2、竞赛积分猜想 描述:
某公司举办了知识竞赛。题目的计分规则如下: 1.每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前得到的分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。 2.每位选手都有一个起步的分数为10分。?
程序要求:
如果某获胜选手最终得分是X分,如果不让你看比赛过程,请推断出他(她)哪个题目答对了,哪个题目答错了吗?把答对的题目记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011?就是一种可能的情况,10道题目的编号从左到右依次排列。
你的任务是算出满足该得分的所有可能情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000
import java.util.ArrayList; import java.util.Scanner; public class Main { private static int finalScore; static ArrayList<String> array = new ArrayList<String>(); public static void main(String[] args){ Scanner in = new Scanner(System.in); finalScore = in.nextInt(); in.close(); char[] answer = new char[10]; judge(10, 0, answer); for (int i = 0; i < array.size()-1; i++){ System.out.print(array.get(i)); System.out.print("|"); } System.out.print(array.get(array.size()-1)); } private static void judge(int score, int num, char[] answer) { if (num == 10){ if(score == finalScore){ String res = new String(answer); array.add(res); } return; } answer[num] = '1'; judge(score*2, num+1, answer); answer[num] = '0'; judge(score - num - 1, num+1, answer); } }
3. 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
import java.util.Scanner; import java.util.regex.*; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); String x = in.nextLine(); in.close(); Pattern p = Pattern.compile("\\d+\\s+[+|-]{1}\\s+\\d+"); Matcher m = p.matcher(x); Boolean bo = m.matches(); if (!bo){ System.out.println("0"); } else{ String[] spli = x.split("\\s"); int a = Integer.parseInt(spli[0]); int b = Integer.parseInt(spli[2]); if(spli[1].equals("+")){ System.out.println(a+b); } if(spli[1].equals("-")){ System.out.println(a-b); } } } }