AtCoder が提供しているABC(AtCoder Beginner Contest)282 のA問題をC++とPythonで解いてみました。ABC282は、2022年12月17日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Generalized ABC(Difficulty : 7)
問題はリンク先をご覧ください。
英字大文字をAから指定文字数分、出力する問題です。AtCoder Problems による Difficulty は、7 でした。
解答案
日常的に使っている文字コードでは、英字大文字が順番に並んでいることが前提となります。A の文字コードは、10進数で65(16進数で41)となります。次のBの文字コードは、10進数で66(16進数で42)となります。
問題を解く方針を書きだします。
- K を読み込む。
- 0 から K までのループで以下を行う。
- ’A’ + ループカウンタ の文字を出力する。
C++ プログラム例(ABC282A)
文字と整数で演算を行うと整数に変換されるため、char を使って文字であることを指定して出力します(10行目)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin >> k;
for (int i = 0; i < k; ++i) {
cout << char('A' + i);
}
cout << endl;
return 0;
}
わたし個人は、標準Cライブラリ stdio.h で定義されている printf の方が慣れています。C++ で使う場合は、cstdio をインクルードします。bits/stdc++.h をインクルードすると、cstdio もインクルードされます。
printf で出力した例です。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin >> k;
for (int i = 0; i < k; ++i) {
printf("%c", 'A' + i);
}
printf("\n");
return 0;
}
どちらも AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC282A)
Python では、ord 関数で指定した文字の文字コードを得ることができます。この結果を chr 関数で文字に戻せば、狙ったことができます。
"""AtCoder Beginner Contest 282 A"""
k = int(input())
for i in range(k):
print(chr(ord('A') + i), end="")
print("")
公式解説に掲載されているユーザ解説で、英字大文字の文字列がすでに定義されていることが分かりました。スライスで文字数分取り出せばよいため、実質1行で書けています。
"""AtCoder Beginner Contest 282 A"""
import string
print(string.ascii_uppercase[:int(input())])
こちらも「AC」と判定されました。
最後に
A問題は、文字や文字列について操作する問題が一定の割合で出題されています。いろいろな書き方を試すと、理解が深まります。
引き続き ABC の問題を紹介していきます。