Official

A - chukodai Editorial by leaf1415


プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは「practice contest」(https://atcoder.jp/contests/practice/) の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
また、プログラミングコンテストの問題に慣れていない方は、「AtCoder Beginners Selection」(https://atcoder.jp/contests/abs) の問題をいくつか試すことをおすすめします。
「競プロ典型 90 問」(https://atcoder.jp/contests/typical90) では、プログラミングコンテストで扱われる典型的な 90 問の問題に挑戦可能です。
「C++入門 AtCoder Programming Guide for beginners (APG4b)」(https://atcoder.jp/contests/APG4b) は、競技プログラマー向けのC++入門用コンテンツです。


本問題に正解するには、問題文で指示されたことを実際に行うプログラムを作成すれば良いです。具体的には、

  1. まず、文字列 \(S\) と整数 \(a, b\) をそれぞれ標準入力から受け取る。
  2. 次に、\(S\)\(a\) 文字目と \(b\) 文字目を入れ替える。
  3. 最後に、文字列 \(S\) を標準出力に出力する。

という手順を行うプログラムを作成します。

手順 1. と手順 3. の入出力の方法は、プログラミング言語に依存するため、使用する言語の仕様を把握しておきましょう。

手順 2. で文字の入れ替えを行う際には、多くのプログラミング言語で

文字列の先頭文字が \(0\) 文字目、次の文字が \(1\) 文字目、その次の文字が\(2\)文字目、\(\ldots\)

というように、\(0\) を起点として添字付けされていることに注意してください。

また一般に、\(2\) つの変数 \(x, y\) の値を入れ替える際には、次のような処理ではうまくいかないことに注意してください

x := y
y := x

これは、\(1\) 行目で変数 \(x\)\(y\) の値を代入した際に、\(x\) の元の値の情報が失われてしまうからです。 これは、次のように一時的な変数 \(t\) を準備し、\(x\) の元の値を \(t\) に記録しておくことで解決できます。

t := x
x := y
y := t

以下にC++言語による本問題の正解例を記載します。

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
  string s;
  int a, b;
  cin >> s >> a >> b;
  
  char tmp = s[a-1];
  s[a-1] = s[b-1];
  s[b-1] = tmp;
  
  cout << s << endl;
  
  return 0;
}

posted:
last update: