PTA刷题Basic篇——1052.卖个萌——Day(26)

题目描述

在这里插入图片描述
在这里插入图片描述
按照给定的符号表情和输入顺序,输出对应输入数字的符号表情。

题目分析

先解释一下,有的朋友可能没看懂,我们拿第一行来说:
第一个数字1对应着第一行符号表情的第一个表情,第二个1对应着第二行的第一个符号表情,2对应着第三行的第二个符号表情,2对应着第二行的第二个符号表情,2对应着第一行的第二个符号表情。
也就是说第一行表示手的表情,第二行是眼睛,第三行是嘴。
我们就可以创建一个二维数组,将每一行的中的每一个表情单独存入二维数组中,然后采用1->2->3->2->1的顺序依次访问二维数组的每一行。例如第一行输入的第一个2,就可以去二维数组中的第三行的第2-1列的表情输出。
其他方面就是截取每一个表情的操作和边界条件的限制。
如果输出的数字超出了对应行表情的数目或者小于1,就输出Are you kidding me? @/@

代码

#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
using namespace std;
string str[4],s[4][15];
int a[6],num[5];
int main ()
{
    int i,j,k;
 int p=0;
    for(i=0;i<3;i++)
 {
     //防止输入空格之后停止
  getline(cin,str[i]);
  int l,r;
  p=0;
  for(j=0;j<str[i].length();j++)
  {
   if(str[i][j]=='[')
    l = j;
   if(str[i][j]==']')
   {
    r = j;
    string ss="";
                //字符串拼接
                //将每一行的表情放入一个二维字符串数组中
                for(k=l+1;k<r;k++)
     ss+=str[i][k];
    s[i][p++] = ss;
   }
  }
  num[i]=p;
 }
 int n;
    scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  for(j=0;j<5;j++)
   scanf("%d",&a[j]);
        //边界条件
  if((a[0]>num[0] || a[4]>num[0] || a[1]>num[1] || a[3]>num[1] || (a[2]>num[2])||a[0]<1 || a[1]<1 || a[2]<1 || a[3]<1 || a[4]<1))
   printf("Are you kidding me? @\\/@\n");
  else
   cout<<s[0][a[0]-1]<<'('<<s[1][a[1]-1]<<s[2][a[2]-1]<<s[1][a[3]-1]<<')'<<s[0][a[4]-1]<<endl;
 }
 return 0;
}

答题用时——17min
Q52——finish√

原创文章 101 获赞 13 访问量 2312

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105904805