您的位置:首页 > 其它

北邮OJ上的题目——1747

2010-03-25 00:04 387 查看
话说这个程序写的实在太笨重了~强烈希望写了这个程序的同学给我一份简单点的~任何语言都行~谢谢了~

Strings calculateSubmit: 352 Accepted:104Time Limit: 1000MS Memory Limit: 65536K
Description
heimengnan最近学习了字符串。他想到整数和浮点数可以做加、减、乘等的运算,那么字符串之间是不是也能做运算呢?

给定字符串s1与s2 有如下的三种运算
+,-, *

s1与s2运算后的结果字符串中的字符要按照字典顺序(abcdef…z这个顺序就是字典序)重新排列后输出。s1和s2可能不以字典顺序给出,s1,与s2中只会出现a,b,c,d,…,z这26个字符。

+(加) 运算:
将s1与s2 中出现的字符相加。即把在s1与s2中的同一字符的个数的和作为结果字符串中该字符的个数。
(如果a在s1中出现1次,在s2中出现10次,那么a会在结果字符串中出现11次,b在s1中出现5次,在s2中未出现,那么b在结果字符串中出现5次。)
例如:
aabbddeaacdemk + kkbmsaa 的结果为 aaaaaabbbcdddeekkkmms

-(减) 运算:
将s1与s2中出现的字符相减。即把在s1与s2中的同一字符的个数的差的绝对值作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 1次,那么a会在结果字符串中出现2次。如果b在s1中未出现,在s2中出现2次,那么b会在结果字符串中出现2次。)
例如:
aabbddeaacdemk – kkbmsaa 的结果为 aabcdddeeks

* (乘) 运算:
将s1与s2中出现的字符相乘,即把在s1与s2中的同一字符的个数的积作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 7次,那么a会在结果字符串中出现21次。如果b在s1中未出现,在s2中出现100次,那么b会在结果字符串中也不会出现即0次。)
例如:
aabbddeaacdemk * kkbmsaa 的结果为 aaaaaaaabbkkm

Input
首先是一个整数t 代表测试数据的组数,然后是 t组运算式,每组运算式有三个部分:
s1 运算符 s2
s1,运算符,s2三个部分会用两个空格分隔,s1与s2中只可能出现a,b,c,d,e,…,z 26个小写字母。
s1,s2的长度小于1000,结果字符串的长度不会超过1000000。

Output
结果字符串,其中的字符按照字典书序排列,如果结果是空字符串,那么直接输出空行。

Sample Input

3
aabbddeaacdemk + kkbmsaa
aabbddeaacdemk - kkbmsaa
aabbddeaacdemk * kkbmsaa

Sample Output

aaaaaabbbcdddeekkkmms
aabcdddeeks
aaaaaaaabbkkm

Hint
建议使用scanf(“%s”,s);读入字符串

Source
heimengnan

import java.util.*;

public class stringCalc {

public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
String[] resultString=new String
;
for (int i = 0; i < n; i++) {
String s1 = cin.next();
char op = cin.next().charAt(0);
String s2 = cin.next();
switch (op) {
case '+':
resultString[i]=stringPlus(s1, s2);
break;
case '-':
resultString[i]=stringMinus(s1, s2);
break;
case '*':
resultString[i]=stringMultiply(s1, s2);
break;
default:
break;
}
}
for(int i=0;i<n;i++){
System.out.println(resultString[i]);
}
}

private static String stringPlus(String s1, String s2) {
// TODO Auto-generated method stub
String rl = s1.concat(s2);
char[] result = new char[rl.length()];
result=rl.toCharArray();
Arrays.sort(result);
return String.valueOf(result);
}

private static String stringMinus(String s1, String s2) {
String s3="";
for (int i = 0; i < s1.length(); i++) {
String temp = s1.charAt(i) + "";

if (s2.contains(temp)) {
s2=s2.replaceFirst(temp, "");
} else {
s3=s3.concat(temp);
}

}
s3=s3.concat(s2);
char[] result = new char[s3.length()];
result = s3.toCharArray();
Arrays.sort(result);
return String.valueOf(result);
}

private static String stringMultiply(String s1, String s2) {
// TODO Auto-generated method stub
String s3 = "";
for (int i = 0; i < s1.length(); i++) {
char t = s1.charAt(i);
String temp = t + "";
if (s2.contains(temp)) {
int rl = calcChar(s1, s2, t);
s1=s1.replaceAll(temp, "A");
for (int k = 0; k < rl; k++) {
s3=s3.concat(temp);
}
}
}
char[] result = new char[s3.length()];
result = s3.toCharArray();
Arrays.sort(result);
return String.valueOf(result);
}

private static int calcChar(String s1, String s2, char t) {
// TODO Auto-generated method stub
int c1 = 0, c2 = 0;
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == t) {
c1++;
}
}
for (int i = 0; i < s2.length(); i++) {
if (s2.charAt(i) == t) {
c2++;
}
}
return c1 * c2;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: