1. 程式人生 > >【PAT】(B)1052 賣個萌 (20)

【PAT】(B)1052 賣個萌 (20)

『題目』

萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的:

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

現給出可選用的符號集合,請你按使用者的要求輸出表情。

輸入格式:

輸入首先在前三行順序對應給出手、眼、口的可選符號集。每個符號括在一對方括號[]內。題目保證每個集合都至少有一個符號,並不超過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? @\/@

『思路』

 我的思路一向比較直白淺顯,把 "[" 和 "]" 變成空格,然後用 sstream 把每個符號存在Vector容器裡,然後按照題目讀取呼叫就行.

『程式碼』(第一次)

#include <bits/stdc++.h>
using namespace std;
//將所有的'['和']'都變成空格
string rep(string s){
	int len = s.length();
	for(int i = 0; i < len; i++)
		if(s[i] == '[' || s[i] == ']')
			s[i] = ' ';
	return s;
}
int main(){
	vector<string> vh,ve,vm;
	string hand,eye,mouth,buf;
	getline(cin,hand);//輸入字元
	getline(cin,eye);
	getline(cin,mouth);
	hand = rep(hand); eye = rep(eye); mouth = rep(mouth);
    //將三個字串分成多個字元陣列	
    stringstream sh(hand);
	stringstream se(eye);
	stringstream sm(mouth);
	vh.push_back("0"); ve.push_back("0"); vm.push_back("0");
	while(sh >> buf) vh.push_back(buf);
	while(se >> buf) ve.push_back(buf);
	while(sm >> buf) vm.push_back(buf);
	int hlen = vh.size(),elen = ve.size(),mlen = vm.size();
	int k,flag = 0;
	cin>>k;
	string ans[k+1];
	for(int i = 0; i < k; i++){
		int a[5];
		for(int j =0; j < 5; j++){
			cin>>a[j];
		}
		if(a[0] > hlen - 1 || a[1] > elen - 1 || a[2] > mlen - 1 || a[3] > elen - 1 || a[4] > hlen - 1)//判斷是否超出序號範圍,超出flag 則為 1
			flag = 1;
		if(!flag){
			ans[i] = vh[a[0]] + "(" + ve[a[1]] + vm[a[2]] + ve[a[3]] + ")" + vh[a[4]];
		}
		else{
			flag = 0;
			ans[i] = "Are you kidding me? @\\/@";// '\'應該加一個轉義符
		}
	}
	for(int i = 0; i < k; i++)
		cout<<ans[i]<<endl;
	return 0;
}

第一次OJ只有一個點過了,我開始以為錯誤是------如果符號中也出現了 '[' 或者  ']' ,則結果一定是錯誤,所以.我苦思冥想,如何可以判斷  '['  ']' 是否在所給字元中,無果.只好重新考慮字串的讀取問題.於是"百度一下,你就知道".發現大佬的AC程式碼,存在 '['  ']' 在字元中時也是無法判斷,所以排除這種可能.接著再回去看題目,發現有個序號從1開始,開始以為輸入會控制,但加上這個下界控制以後,又過了一個測試點.

最後經過不懈努力,發現在輸入的符號為空的時候,會全部輸出"Are you kidding me? @\\/@";

『AC程式碼』

#include <bits/stdc++.h>
using namespace std;
string rep(string s) {
	int len = s.length();
	for(int i = 0; i < len; i++)
		if(s[i] == '[' || s[i] == ']')
			s[i] = ' ';
	return s;
}
int cnt(string s) {
	int len = s.length(),tot = 0;
	for(int i = 0; i < len; i++)
		if(s[i] == '[')
			tot++;
	//cout<<tot<<"  "; 
	return tot;
}
void print(vector<string> v) {
	int len = v.size();
	for(int i = 0; i < len; i++)
		cout<<v[i];
	cout<<endl;
}
int main() {
	vector<string> vh,ve,vm;
	string hand,eye,mouth,buf;
	getline(cin,hand);
	getline(cin,eye);
	getline(cin,mouth);
	int th = cnt(hand), te = cnt(eye), tm = cnt(mouth);
	hand = rep(hand);
	eye = rep(eye);
	mouth = rep(mouth);
	stringstream sh(hand);
	stringstream se(eye);
	stringstream sm(mouth);
	vh.push_back("0");
	ve.push_back("0");
	vm.push_back("0");
	while(sh >> buf) vh.push_back(buf);
	while(se >> buf) ve.push_back(buf);
	while(sm >> buf) vm.push_back(buf);
	int hlen = vh.size(),elen = ve.size(),mlen = vm.size();
	/*print(vh);
	print(ve);
	print(vm);*/
	int k;
	cin>>k;
	string ans[k+1];
	for(int i = 0; i < k; i++) {
		int a[5];
		for(int j =0; j < 5; j++) {
			cin>>a[j];
		}
		if(a[0] > th|| a[1] > te || a[2] > tm || a[3] >te  || a[4] > th)
			ans[i] = "Are you kidding me? @\\/@";
		else if(a[0] <= 0 || a[1] <= 0 || a[2] <= 0 || a[3] <= 0 || a[4] <= 0)
			ans[i] = "Are you kidding me? @\\/@";
		else{
			if(hlen != 1)
			ans[i] = vh[a[0]] ;
			if(elen != 1)
			ans[i] = ans[i]+ "(" + ve[a[1]];
			if(mlen != 1)
			ans[i] = ans[i]+ vm[a[2]];
			if(elen != 1)
			ans[i]=ans[i]+ ve[a[3]] + ")";
			if(hlen != 1)
			ans[i] = ans[i] + vh[a[4]];
		}
			
	}
	for(int i = 0; i < k; i++)
		cout<<ans[i]<<endl;
	return 0;
}

『感悟』

我要去睡覺了,這題一點也不萌,程式碼寫的有一些長,題目有一些漏洞,PAT就是在一些小地方給你挖坑,但是題目存在一些漏洞。

還有輸出儘量分開寫

相關推薦

PATB1052 (20)

『題目』 萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的: [左手]([左眼][口][右眼])[右手] 現給出可選用的符號集合,請你按使用者的要求輸出表情。 輸入格式: 輸入首先在前三行順序對應給出手、

PATB1054 求平均值 (20)

『題目』 本題的基本要求非常簡單:給定N個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是[-1000,1000]區間內的實數,並且最多精確到小數點後2位。當你計算平均值的時候,不能把那些非法的資料算在內。 輸入格式: 輸入第一行給出正整

PATB1040 有幾PAT

『題目』 字串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。 現給定字串,問一共可以形成多少個PAT? 輸入格式: 輸入只有一行,包含一個字串,長度不超過10

PAT乙級1011. A+B和C (15)

時間限制 100 ms 記憶體限制 65536 kB 程式碼長度限制 8000 B 判題程式 Standard 作者 HOU, Qiming 一、題目 給定區間[-231, 231]內的3個整數A、B和C,請判斷A+B是否大於C。 輸入格式: 輸

PAT Basic 1052. (20)C語言實現

, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設

PAT乙級1015. 德才論 (25)

時間限制 200 ms 記憶體限制 65536 kB 程式碼長度限制 8000 B 判題程式 Standard 作者 CHEN, Li 一、題目 宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”: “是故才德全盡謂之聖人,才德兼亡謂之愚

PAT1052. (20)

萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的: 左手[右手] 現給出可選用的符號集合,請你按使用者的要求輸出表情。 輸入格式: 輸入首先在前三行順序對應給出手、眼、口的可選符號集。每個符號括

1052. (20)-PAT乙級真題

萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的:[左手]([左眼][口][右眼])[右手]現給出可選用的符號集合,請你按使用者的要求輸出表

PAT.1052. (20)--易錯點

題目描述: 萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的: 左手[右手] 現給出可選用的符號集合,請你按使用者的要求輸出表情。 輸入格式: 輸入首先在前三行順序對應給出手、眼、口的可選符號

PAT 1052 python非零返回

1052 賣個萌 (20 分) 萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的: [左手] ([左眼] [口] [右眼]) [右手] 現給出可選用的符號集合,請你按使用者的要求輸出表情。 輸入格式

PAT-乙-1052 1052 20

程式碼 #include <iostream> #include <vector> using namespace std; const int SIZE = 3; int main() { string s[SIZE];

[轉]Web APi之認證Authentication兩種實現方式十三

用戶數 ted das 客戶 元素 基礎 目標 開始 net 本文轉自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如

Java_SSMEclipse中通過maven引入jar包

osc ati eight wid -- stat ack ips 技術 這篇博文我們介紹一下如何通過eclipse配置setting並引入jar包 (1)eclipse:Window--Preferences--Maven--User Setting 全部完成

Web APi之認證Authentication兩種實現方式十三

基於web 推薦 zed {0} scheme sage https 函數 ges 原文:Web APi之認證(Authentication)兩種實現方式【二】(十三)前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如何合理的利用

Headmaster's Headache UVa10817DP

employ ace class CA ted same ring form rain 題目: The headmaster of Spring Field School is considering employing some new teachers for cert

PyQt502添加組件:圖標、按鈕

5.1 connect pyqt 任務 模塊 內置 圖標 utf block 環境說明: 平臺:WIN10(教育版) 環境:Anaconda5.2(Python3.6.6) IDE:Pacharm2018.2.1(專業版) PyQt5:5.11.2 任務目標一:添加圖標

PyQt502改變窗體的位置和大小

blank font .com python core www. geo target elf 特別說明 為了直接展示本篇的重點,往期內容將不再寫入代碼中,讀者可按需自行編碼組合 為了更好的展示效果,代碼段將以圖片的形式上傳,若想復制代碼可移步筆者的Github 為了便於

PyQt506添加組件:按鈕,並設置位置和大小

github 輸出 技術 代碼 qt5 上傳 評論 教育版 www 特別說明 為了直接展示本篇的重點,往期內容將不再寫入代碼中,讀者可按需自行編碼組合 為了更好的展示效果,代碼段將以圖片的形式上傳,若想復制代碼可移步筆者的Github 為了便於學習,每篇只解決一個小問題,

TensorFlow01線性回歸

lob 超參數 教育版 ini src ont numpy mat font 特別說明 代碼地址:Github 環境說明 平臺:WIN10(教育版) 環境:Anaconda5.2(Python3.6.6) IDE:Pacharm2018.2.3(專業版) Tensor

Django2Django模塊創建應用程序

網站 sca tar 註意 運行 ESS etime tex efi 保持runserver還在運行,在manage.py相同的目錄下,新開一個終端窗口,激活虛擬環境,執行startapp命令 python manage.py startapp learn