北邮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
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; } }
相关文章推荐
- 北邮OJ上的题目——1099
- 北邮OJ上的题目——1549
- 北邮OJ上的题目——1426
- 北邮OJ上的题目——1558
- 北邮OJ上的题目——1547
- 北邮OJ上的题目——1557
- 北邮OJ上的题目——1497
- 北邮OJ上的题目——1553
- 北邮OJ上的题目——1436
- 北邮OJ上的题目——1001
- 北邮OJ上的题目——1435
- 南阳 oj 擅长排列的小明 题目19
- 南阳oj 郁闷的c小加(一) 题目257
- 南阳理工OJ_题目14 会场安排问题
- 南阳理工OJ_题目914 Yougth的最大化
- 南阳 oj 重建二叉树 题目756
- 大家都说是水题。。好吧,那我就从水题开始做。。自己独立的做。正好最近在辅导大二的数据结构,自己也加强下对栈的理解和应用。 第一次那么完全的独立完成OJ的题,激动呐!读题目理解就废了我好多的时间,虽说英语过了
- 南阳理工OJ_题目58 最少步数
- 南阳理工OJ_题目306 走迷宫
- 数的长度【南阳 oj 题目69】