| 萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手]
现 给 出 可 选 用 的 符 号 集 合,请 你 按 用 户 的 要 求 输 出 表 情。 输入格式: 输入首先在前三行顺序对应给出手、眼、口的可选符号集,每个符号括在一对方括号 [ ]内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符。 之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选择,顺序为左手、左眼、口、右眼、右手——这里只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。 输出格式: 对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出 Are you kidding me? @\/@。 |
输入样例:
[╯][╰][^][-][=][>][<][@][⊙]
输出样例:
考察 :字符与字符数组的读入与简单运用,挺有趣的一道题 |
注意 : 1. 一个部位的字符不一定只有一个,例如[/~]就是一个部位俩个字符 2. 后续查询的编号可能是0或负数,注意额外判断 |
思路 :三维字符串数组储存表情包即可 |
C/C++ (stl) (基础解法看下方)
vectorchar>> flag[3],result;
if(N>0) box.push_back(x);
if(N==0 && !box.empty()){
if(n<=flag[0].size() && n>0) result.push_back(flag[0][n-1]);
if(n<=flag[2].size() && n>0) result.push_back(flag[2][n-1]);
if(n<=flag[1].size() && n>0) result.push_back(flag[1][n-1]);
if(!f) cout << "Are you kidding me? @\\/@" << endl;
for(char x:result[z]) cout << x;
C (基础解法)
char f[3][12][6], input[1001];
int fNum[3] = {1, 1, 1}, N, a, b, c, d, e;
for (int z = 0; z < 3; z++) {
for (int z1 = 0; z1 < strlen(input); z1++) {
f[z][fNum[z]][len] = '\0';
if (get) f[z][fNum[z]][len++] = input[z1];
if (input[z1] == '[') get = 1;
scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
if (a < 1 || b < 1 || c < 1 || d < 1 || e < 1) ok = 0;
if (a >= fNum[0] || b >= fNum[1] || c >= fNum[2] || d >= fNum[1] || e >= fNum[0]) ok = 0;
if (ok==1) printf("%s(%s%s%s)%s\n", f[0][a], f[1][b], f[2][c], f[1][d], f[0][e]);
else printf("Are you kidding me? @\\/@\n");

