思路:把那张图打表(吐血...),然后就按照规则输出就行。
AC代码
#include <cstdio> #include <cmath> #include <cctype> #include <algorithm> #include <cstring> #include <utility> #include <string> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> typedef long long LL; const int maxn = 50 + 5; string a[maxn]; void init() { for(int i = 0; i <= 35; ++i) { if(i == 0) a[i] = ".-"; else if(i == 1) a[i] = "-..."; else if(i == 2) a[i] = "-.-."; else if(i == 3) a[i] = "-.."; else if(i == 4) a[i] = "."; else if(i == 5) a[i] = "..-."; else if(i == 6) a[i] = "--."; else if(i == 7) a[i] = "...."; else if(i == 8) a[i] = ".."; else if(i == 9) a[i] = ".---"; else if(i == 10) a[i] = "-.-"; else if(i == 11) a[i] = ".-.."; else if(i == 12) a[i] = "--"; else if(i == 13) a[i] = "-."; else if(i == 14) a[i] = "---"; else if(i == 15) a[i] = ".--."; else if(i == 16) a[i] = "--.-"; else if(i == 17) a[i] = ".-."; else if(i == 18) a[i] = "..."; else if(i == 19) a[i] = "-"; else if(i == 20) a[i] = "..-"; else if(i == 21) a[i] = "...-"; else if(i == 22) a[i] = ".--"; else if(i == 23) a[i] = "-..-"; else if(i == 24) a[i] = "-.--"; else if(i == 25) a[i] = "--.."; else if(i == 26) a[i] = "-----"; else if(i == 27) a[i] = ".----"; else if(i == 28) a[i] = "..---"; else if(i == 29) a[i] = "...--"; else if(i == 30) a[i] = "....-"; else if(i == 31) a[i] = "....."; else if(i == 32) a[i] = "-...."; else if(i == 33) a[i] = "--..."; else if(i == 34) a[i] = "---.."; else if(i == 35) a[i] = "----."; } for(int i = 0; i <= 35; ++i) { string s = a[i]; a[i].clear(); for(int j = 0; j < s.size(); ++j) { if(s[j] == '.') a[i].push_back('='); else for(int k = 0; k < 3; ++k) a[i].push_back('='); if(j < s.size()-1) a[i].push_back('.'); } } } int main() { init(); int T, n, kase = 1; char s[25]; scanf("%d", &T); while(T--) { printf("Case #%d: ", kase++); scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%s", s); for(int j = 0; j < strlen(s); ++j) { s[j] = toupper(s[j]); if(s[j] >= 'A' && s[j] <= 'Z') { cout << a[s[j]-'A']; } else cout << a[s[j]-'0'+26]; if(j != strlen(s)-1) printf("..."); } if(i != n-1) printf("......."); } printf("\n"); } return 0; }
如有不当之处欢迎指出!