ICPCの過去問
Keitai Message
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2006
考え方:
2次元配列に所定のデータを格納しておき、hoge[{押された番号}][{押した回数} % {押された番号の要素数} - 1]でアクセスして、それを結果に格納する。
{押した回数} % {押された番号の要素数} = 0のときのみ、hoge[{押された番号}][押された番号の要素数} - 1]でアクセスして結果に格納する。
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<string> hoge; hoge.push_back(".,!? "); hoge.push_back("abc"); hoge.push_back("def"); hoge.push_back("ghi"); hoge.push_back("jkl"); hoge.push_back("mno"); hoge.push_back("pqrs"); hoge.push_back("tuv"); hoge.push_back("wxyz"); int T = 0; cin >> T; for (int k = 0; k < T; k++) { string s; cin >> s; string resurt = ""; int c_count = 0; char h; int last_iti = 0; for (int i=0; i < s.size(); i++) { if(c_count != 0) { if (h != s[i]) { if (s[i] == '0') { int iti = h - 48 - 1; int iti_hoge = c_count % hoge[iti].size(); if (iti_hoge == 0) { resurt += hoge[iti][hoge[iti].size() - 1]; }else { resurt += hoge[iti][iti_hoge - 1]; } } c_count = 0; }else { c_count++; } }else { if (s[i] == '0') { continue; } h = s[i]; c_count++; } } //結果表示 cout << resurt << endl; } }