PAT (Basic Level) Practise (中文) 1052. 卖个萌 (20)

1052. 卖个萌 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

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

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

输入格式:

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

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

输出格式:

对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出“Are you kidding me? @\/@”。

输入样例:
[╮][╭][o][~\][/~]  [<][>]
 [╯][╰][^][-][=][>][<][@][⊙]
[Д][▽][_][ε][^]  ...
4
1 1 2 2 2
6 8 1 5 5
3 3 4 3 3
2 10 3 9 3
输出样例:
╮(╯▽╰)╭
<(@Д=)/~
o(^ε^)o
Are you kidding me? @\/@

/*
 * 部分正确 4分 c++的 ac
 * 思路:
 * 这道题设置的难点是给你的手 眼 口表情符个数是不定的
 * 而且[表情符]是这样获取的 这里用String.charAt(i)判断是否开始录入
 * 做三个集合存放
 * 录入表情符完成之后读取用户输入
 * for 用户数 for new length=5的 字符串数组 获取用户输入
 * 然后匹配之前的list集合(左手 ( 左眼 口 右眼 ) 右眼 ) 超出范围的输出Are you kidding me? @\/@
 *
 */
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class num1052 {
    public static void main(String[] args) {
        // String str="[╮][╭][o][~\\][/~]  [<][>]";//直接定义字符串会发生\这个转移符的问题
        // List<String> list1=parse(str);
        // for (String string : list1) {
        // System.out.println(string);
        // }
        Scanner input = new Scanner(System.in);
        List<String> hand = parse(input.nextLine());
        List<String> eye = parse(input.nextLine());
        List<String> mouth = parse(input.nextLine());
        int n = input.nextInt();
        for (int i = 0; i < n; i++) {
            int[] num = new int[5];
            num[0] = input.nextInt();
            num[1] = input.nextInt();
            num[2] = input.nextInt();
            num[3] = input.nextInt();
            num[4] = input.nextInt();

            if (num[0] >= hand.size() || num[0] < 1 || num[1] >= eye.size()
                    || num[1] < 1 || num[2] >= mouth.size() || num[2] < 1
                    || num[3] >= eye.size() || num[3] < 1
                    || num[4] >= hand.size() || num[4] < 1) {
                System.out.println("Are you kidding me? @\\/@");
                continue;
            }
            System.out.println(hand.get(num[0]) + "(" + eye.get(num[1])
                    + mouth.get(num[2]) + eye.get(num[3]) + ")"
                    + hand.get(num[4]));

        }
        
    }

    public static List<String> parse(String str) {
        boolean isStrat = false;
        List<String> list = new ArrayList<String>();
        String temp = "";
        list.add(temp);
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '[') {
                isStrat = true;
            } else if (str.charAt(i) == ']') {
                isStrat = false;
                list.add(temp);
                temp = "";
            } else {
                if (isStrat) {
                    temp += str.charAt(i);
                }
            }
        }
        return list;
    }
}
//c++ac代码
#include <iostream>
#include <vector>
using namespace std ;
int main ( ) {
     vector < vector < string > > v ;
     for ( int i = 0 ; i < 3 ; i ++ ) {
         string s ;
         getline ( cin , s ) ;
         vector < string > row ;
         int j = 0 , k = 0 ;
         while ( j < s . length ( ) ) {
             if ( s [ j ] == '[' ) {
                 while ( k ++ < s . length ( ) ) {
                     if ( s [ k ] == ']' ) {
                         row . push_back ( s . substr ( j + 1 , k - j - 1 ) ) ;
                         break ;
                     }
                 }
             }
             j ++ ;
         }
         v . push_back ( row ) ;
     }
     int n ;
     cin >> n ;
     for ( int i = 0 ; i < n ; i ++ ) {
         int a , b , c , d , e ;
         cin >> a >> b >> c >> d >> e ;
         if ( a > v [ 0 ] . size ( ) || b > v [ 1 ] . size ( ) || c > v [ 2 ] . size ( ) || d > v [ 1 ] . size ( ) || e > v [ 0 ] . size ( ) || a < 1 || b < 1 || c < 1 || d < 1 || e < 1 ) {
             cout << "Are you kidding me? @\\/@" << endl ;
             continue ;
         }
         cout << v [ 0 ] [ a - 1 ] << "(" << v [ 1 ] [ b - 1 ] << v [ 2 ] [ c - 1 ] << v [ 1 ] [ d - 1 ] << ")" << v [ 0 ] [ e - 1 ] << endl ;
     }
     return 0 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值