3522 - 炉石秘籍
时间限制 : 2 秒
内存限制 : 256 MB
小明……不对,这次是小涛。和小明sala失败后,小涛深深的理解到了数学对于游戏,对于ACM,对于生命的重要性。于是他玩了一个很考验小学数学的游戏——《炉石传说》,90%情况下只需要计算十以内的加减法。

他最常做的事情就是计算场上怪物攻击力的和。他用了一套鱼人的卡组(别忘了小涛只是小学生),攻击力只有<span>1,2,3</span><span>三种,让计算变得更加简单。</span>
但是小涛有个毛病,他只能从小到大加不能从大到小加(学名:他只能进行非降序的运算)。比如计算<span>3+2+1</span><span>,他必须把顺序换一换变成</span><span>1+2+3</span><span>。计算</span><span>1+3+1+3+1</span><span>,他只能先转换成</span><span>1+1+1+3+3</span><span>才能够进行计算。</span>
现在给出一系列加法,你能否将这个加法式子转换成小涛能够看懂的顺序?
题目输入
第一行是组数T(保证1<T<50)。
每组数据包含一个字符串(字符串保证长度小于100),这个字符串只包含1,2,3和加号(1个数的话,也有可能没有加号),组成一个加法式子。
题目输出
在单独的一行中输出小涛可以计算的排序以后的式子。
输入/输出样例
输入格式
3 3+2+1 1+1+3+1+3 2
输出格式
1+2+3 1+1+1+3+3 2
C语言解答
#include <stdio.h> #include <math.h> #include <string.h> int main() { int t = 0; scanf("%d", &t); getchar(); while(t--) { char s[100] = {0}; gets(s); int one = 0; int two = 0; int three = 0; for(int i = 0; i <(int)strlen(s); i ++) { if(s[i] == '1') one ++; if(s[i] == '2') two ++; if(s[i] == '3') three ++; } char ss[100] = {0}; for(int x = 0; x < one; x++) strcat(ss, "1+"); for(int y = 0; y < two; y++) strcat(ss, "2+"); for(int z = 0; z < three; z++) strcat(ss, "3+"); ss[(int)strlen(s)] = 0; printf("%s\n", ss); } return 0; }
C++解答
#include <iostream> #include <string> #include <cstring> #include <fstream> #include <algorithm> using namespace std; int saver[200]; int main() { int testcase; // ifstream cin; // ofstream cout; // cin.open("j.in"); // cout.open("j.out"); cin>>testcase; while(testcase--) { string tar,tmp; int count1=0,count2=0,count3=0; cin>>tar; memset(saver,0,sizeof(saver)); for(int i=0;i<tar.length();i++) { if(tar[i]=='1') count1++; if(tar[i]=='2') count2++; if(tar[i]=='3') count3++; } int p=count1+count2+count3-1; int q=0; for(int i=0;i<count1;i++) { cout<<1; if(q!=p) { cout<<"+"; q++; } } for(int j=0;j<count2;j++) { cout<<2; if(q!=p) { cout<<"+"; q++; } } for(int k=0;k<count3;k++) { cout<<3; if(q!=p) { cout<<"+"; q++; } } cout<<endl; } return 0; }