#問題文
すぬけ君は新しくできたプログラミングコンテストに会員登録しました。 登録に使ったパスワードを覚えておく自信が無かったすぬけ君は、 手元の紙にパスワードをメモしておくことにしました。 ただし、そのままメモをすると誰かにパスワードを盗まれてしまうかもしれないので、 文字列の偶数番目の文字と奇数番目の文字をそれぞれ別々の紙にメモしておくことにしました。
パスワードの奇数番目の文字だけを順番を変えずに取り出した文字列Oと、 偶数番目の文字だけを順番を変えずに取り出した文字列 Eが与えられます。すぬけ君のかわりにパスワードを復元してください。
#制約
・O, Eは小文字のアルファベット( a - z )からなる文字列
・1≤|O|,|E|≤50
・|O|−|E|は 0または1である。
とある中で自分は以下のようなコードを書きました。
#include <bits/stdc++.h> using namespace std; int main(){ string O,E; cin >> O >> E; int N=O.length(); int M=E.length(); for (int i=0;i<N;i+=2){ for (int j=1;j<M;j+=2){ cout << O[i]+E[j] << endl; } } }
これを手元で実行してみたところabc def
と打ったらadbecf
と出てきて欲しいのですが198 200
と出てしまいました。僕のコードをご覧いただいたらなんとなく何がしたいかわかっていただけるかと思いますがどうしたら文字列Oと文字列Eを交互に出力できるようになりますでしょうか?
また解答PDFには以下のようなコードが書かれていました。
#include <iostream> using namespace std; int main (){ string E, O; cin >> E >> O; for (int i=0; i < E. size () ; i++) { cout << E[i]; if(i < O. size () ) cout << O[i]; } return 0; }
このコードが理解できません。これだとE.size以下かつO.size以下のときE[i]もO[i]も出力されそうですがちゃんと交互に出る要素がどこにあるのか教えていただきたいです。長文になってしまいましたがよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー