1052. 卖个萌

来源:互联网 发布:华夏财富网络借贷信息 编辑:程序博客网 时间:2024/05/29 07:03

原文描述:

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

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

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

输入格式:

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

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

输出格式:

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

输入样例:
[╮][╭][o][~\][/~]  [<][>] [╯][╰][^][-][=][>][<][@][⊙][Д][▽][_][ε][^]  ...41 1 2 2 26 8 1 5 53 3 4 3 32 10 3 9 3
大致思路:

先把[ ] 里的字符全部储存到数组里,同时计算出字符个数方便输出。然后就剩下字符输出格式的问题了。

#include <stdio.h>char hand [ 10 ] [ 5 ] , eye [ 10 ] [ 5 ] , mouse [ 10 ] [ 5 ] ;int get_symbol ( char a [  ] [ 5 ] ){    char c , i = 0 , j = 0 ;    while ( ( c = getchar ( ) ) != '\n' )    {        if ( c == '[' )        {            while ( ( c = getchar ( ) ) != ']' )            {                if ( c ==  '\n' )                    return i-1 ;                a [ i ] [ j ] = c ;                j ++ ;            }            a [ i ] [ j ] = '\0' ;            i++ ;            j = 0 ;        }    }    return i ;}int main ( ){    int hand_num , eye_num , mouse_num ;    int i , N , a1, a2, a3, a4, a5 ;    hand_num = get_symbol( hand );    eye_num = get_symbol( eye );    mouse_num = get_symbol ( mouse );    scanf("%d",&N );    for ( i = 0 ; i < N ; i ++ )    {         scanf("%d %d %d %d %d",&a1, &a2, &a3, &a4, &a5 );         if ( a1 > hand_num || a5 > eye_num  || a2 > eye_num || a4 > eye_num || a3 >mouse_num )            printf("Are you kidding me? @\\/@\n") ;         else if ( a1 <= 0 || a2 <= 0 || a3 <= 0 || a4 <= 0 || a5 <= 0 )            printf("Are you kidding me? @\\/@\n") ;         else            printf("%s(%s%s%s)%s\n",hand [ a1-1 ] ,eye [ a2-1 ] , mouse [ a3-1 ] , eye [ a4-1 ] , hand [ a5-1 ] ) ;    }    return 0;}

还有一种方法:直接用scanf读入字符 [ ]

#include <stdio.h>/* https://en.wikipedia.org/wiki/Variable-width_encoding */int main(){    char c, symbols[3][10][5] = {0};    for(int symbol = 0; symbol < 3; symbol++)        for(int index = 0; (c = getchar()) != '\n'; )            if(c == '[') scanf("%[^]]", symbols[symbol][index++]);    int N, m[5];    scanf("%d", &N);    for(int i = 0; i < N; i++)    {        for(int i = 0; i < 5; i++)  scanf("%d", m + i);        if(m[0] > 0 && m[0] <= 10 && *symbols[0][--m[0]]        && m[1] > 0 && m[0] <= 10 && *symbols[1][--m[1]]        && m[2] > 0 && m[0] <= 10 && *symbols[2][--m[2]]        && m[3] > 0 && m[0] <= 10 && *symbols[1][--m[3]]        && m[4] > 0 && m[0] <= 10 && *symbols[0][--m[4]])            printf("%s(%s%s%s)%s\n", symbols[0][m[0]], symbols[1][m[1]],                   symbols[2][m[2]], symbols[1][m[3]], symbols[0][m[4]]);        else            puts("Are you kidding me? @\\/@");    }    return 0;}链接:http://www.jianshu.com/p/9e4ccd9cc0e3

原文见链接。

原创粉丝点击