• 1052 卖个萌


     萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:

    [左手]([左眼][口][右眼])[右手]
    

    现 给 出 可 选 用 的 符 号 集 合,请 你 按 用 户 的 要 求 输 出 表 情。

    输入格式:

    输入首先在前三行顺序对应给出手、眼、口的可选符号集,每个符号括在一对方括号 [ ]内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符

    之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选择,顺序为左手、左眼、口、右眼、右手——这里只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。

    输出格式:

    对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出 

    Are you kidding me? @\/@。

    输入样例:

    1. [╮][╭][o][~\][/~] [<][>]
    2. [╯][╰][^][-][=][>][<][@][⊙]
    3. [Д][▽][_][ε][^] ...
    4. 4
    5. 1 1 2 2 2
    6. 6 8 1 5 5
    7. 3 3 4 3 3
    8. 2 10 3 9 3

    输出样例:

    1. ╮(╯▽╰)╭
    2. <(@Д=)/~
    3. o(^ε^)o
    4. Are you kidding me? @\/@

    察 :字符与字符数组的读入与简单运用,挺有趣的一道题

    注意 :

    1. 一个部位的字符不一定只有一个,例如[/~]就是一个部位俩个字符

    2. 后续查询的编号可能是0或负数,注意额外判断

    思路 :三维字符串数组储存表情包即可 


    C/C++ (stl) (基础解法看下方)

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. vectorchar>> flag[3],result; // 0手1眼2嘴,答案输出
    6. vector<char> box; // 辅助多个字符存入
    7. int N=0,n;
    8. string s;
    9. for(int z=0;z<3;z++){
    10. getline(cin,s,'\n'); // 这里考虑了这样的套娃情况[[-]],不过貌似没有这个测试点
    11. for(char x:s){
    12. if(x==']') N--;
    13. if(N>0) box.push_back(x);
    14. if(N==0 && !box.empty()){
    15. flag[z].push_back(box);
    16. box.clear();
    17. }
    18. if(x=='[') N++;
    19. }
    20. }
    21. cin >> N;
    22. while (N--){
    23. bool f = true; // 判断编号是否合理
    24. for(int z=0;z<5;z++){
    25. cin >> n;
    26. if(z%4==0)
    27. {
    28. if(n<=flag[0].size() && n>0) result.push_back(flag[0][n-1]);
    29. else f = false;
    30. }
    31. else if(z==2)
    32. {
    33. if(n<=flag[2].size() && n>0) result.push_back(flag[2][n-1]);
    34. else f = false;
    35. }
    36. else
    37. {
    38. if(n<=flag[1].size() && n>0) result.push_back(flag[1][n-1]);
    39. else f = false;
    40. }
    41. }
    42. if(!f) cout << "Are you kidding me? @\\/@" << endl;
    43. else
    44. {
    45. for(int z=0;z<5;z++) {
    46. for(char x:result[z]) cout << x;
    47. if(z==0) cout << "(";
    48. if(z==3) cout << ")";
    49. }
    50. cout << endl;
    51. }
    52. result.clear();
    53. }
    54. return 0;
    55. }

    C (基础解法)

    1. #include
    2. #include
    3. int main(void) {
    4. char f[3][12][6], input[1001];
    5. int fNum[3] = {1, 1, 1}, N, a, b, c, d, e;
    6. for (int z = 0; z < 3; z++) {
    7. gets(input);
    8. int get = 0, len = 0;
    9. for (int z1 = 0; z1 < strlen(input); z1++) {
    10. if (input[z1] == ']') {
    11. f[z][fNum[z]][len] = '\0';
    12. fNum[z]++;
    13. get = len = 0;
    14. }
    15. if (get) f[z][fNum[z]][len++] = input[z1];
    16. if (input[z1] == '[') get = 1;
    17. }
    18. }
    19. scanf("%d", &N);
    20. while (N--) {
    21. int ok = 1;
    22. scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
    23. if (a < 1 || b < 1 || c < 1 || d < 1 || e < 1) ok = 0;
    24. if (a >= fNum[0] || b >= fNum[1] || c >= fNum[2] || d >= fNum[1] || e >= fNum[0]) ok = 0;
    25. 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]);
    26. else printf("Are you kidding me? @\\/@\n");
    27. }
    28. return 0;
    29. }




  • 相关阅读:
    Linux上C++通过LDAP协议使用kerberos认证AES加密连接到AD服务器
    Redis - String|Hash|List|Set|Zset基本数据类型的介绍
    把a文件里面的内容全部给b文件里面去
    摩根大通限制英国客户购买加密货币,市场掀起涟漪!
    【现代控制理论期末考点】
    element-ui table分页/筛选后保留勾选项
    TCP的十一种状态集
    [附源码]Python计算机毕业设计SSM联动共享汽车管理系统(程序+LW)
    大三0基础 java学习求助?
    为什么在token在http请求头中的Authorization要加Bearer前缀?
  • 原文地址:https://blog.csdn.net/daybreak_alonely/article/details/126148172