1、描述:
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入字符串,最大长128
输出:
输入字符串
样例输入: AAAABBBB
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入字符串,最大长128
输出:
输入字符串
样例输入: AAAABBBB
样例输出: 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);
}
}
}
}