【最详细解析】1052 卖个萌 (20分)_28行代码AC
立志用更少的代碼做更高效的表達(dá)
Pat乙級(jí)最優(yōu)化代碼+題解+分析匯總——>傳送門
萌萌噠表情符號(hào)通常由“手”、“眼”、“口”三個(gè)主要部分組成。簡(jiǎn)單起見,我們假設(shè)一個(gè)表情符號(hào)是按下列格式輸出的:
[左手]([左眼][口][右眼])[右手]
現(xiàn)給出可選用的符號(hào)集合,請(qǐng)你按用戶的要求輸出表情。
輸入格式:
輸入首先在前三行順序?qū)?yīng)給出手、眼、口的可選符號(hào)集。每個(gè)符號(hào)括在一對(duì)方括號(hào) []內(nèi)。題目保證每個(gè)集合都至少有一個(gè)符號(hào),并不超過 10 個(gè)符號(hào);每個(gè)符號(hào)包含 1 到 4 個(gè)非空字符。
之后一行給出一個(gè)正整數(shù) K,為用戶請(qǐng)求的個(gè)數(shù)。隨后 K 行,每行給出一個(gè)用戶的符號(hào)選擇,順序?yàn)樽笫帧⒆笱邸⒖凇⒂已邸⒂沂帧@里只給出符號(hào)在相應(yīng)集合中的序號(hào)(從 1 開始),數(shù)字間以空格分隔。
輸出格式:
對(duì)每個(gè)用戶請(qǐng)求,在一行中輸出生成的表情。若用戶選擇的序號(hào)不存在,則輸出 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? @/@
難點(diǎn):
-
字符為不定長(zhǎng)字符(有的甚至是漢字),無(wú)法用逐個(gè)遍歷的形式查找賦值。
解決辦法:find函數(shù)查找+substr函數(shù)剪切 -
字符串?dāng)?shù)量未知
解決辦法:vector動(dòng)態(tài)數(shù)組存儲(chǔ)。 -
輸出時(shí),無(wú)法輸出右斜杠。
解決辦法:再加一個(gè)右斜杠
話不多說(shuō)看代碼。
代碼
#include<bits/stdc++.h> using namespace std; int main() {vector<string>v[3];for(int j = 0; j < 3; j++) {string s; getline(cin, s);int len = s.length();int find1 = 0, find2 = 0;while(1) {find1 = s.find('[', find1);find2 = s.find(']', find2);if(find1 == -1 || find2 == -1) break;v[j].push_back(s.substr(find1+1, find2-find1-1));find1++; find2++; }}int n; cin>>n; while(n--) {int a1, a2, a3, a4, a5; cin >> a1 >> a2 >> a3 >> a4 >> a5;a1 -= 1; a2 -= 1; a3 -= 1; a4 -= 1; a5 -= 1;if(a1 >= v[0].size() || a2 >= v[1].size() || a3 >= v[2].size() || a4 >= v[1].size() || a5 >= v[0].size()) {cout << "Are you kidding me? @\\/@" << '\n';} else {cout << v[0][a1] << '(' << v[1][a2] << v[2][a3] << v[1][a4] << ')' << v[0][a5] << '\n';}} return 0; }耗時(shí)
總結(jié)
一道非常好的題, 自認(rèn)為如果在考試時(shí)碰到絕對(duì)沒辦法拿滿分。
讓我們更熟練的鞏固了find()和substr()嵌套vector的用法。值得思考。
總結(jié)
以上是生活随笔為你收集整理的【最详细解析】1052 卖个萌 (20分)_28行代码AC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最详细】测试点分析_1051 复数乘法
- 下一篇: 【简洁代码】1053 住房空置率 (20