题目描述
按照给定的符号表情和输入顺序,输出对应输入数字的符号表情。
题目分析
先解释一下,有的朋友可能没看懂,我们拿第一行来说:
第一个数字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√