A - Octave Editorial
by
sheyasutaka
初心者の方へ
- プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは practice contest の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
- また、プログラミングコンテストの問題に慣れていない方は、 AtCoder Beginners Selection の問題をいくつか試すことをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
実装方針
この問題にはさまざまな実装方針が考えられます.
方針 1: ループ
「\(X\) を \(2\) 倍する」という操作を \(Y\) 回繰り返し,得られた \(X\) の値を出力します.
方針 2: シフト演算や冪乗演算
主要なプログラミング言語の多くは,\(2^Y\) の値を高速に得る手段をもちます.
たとえば C++ ではシフト演算 1 << y で,Python では冪乗演算 2 ** y で得られます.
方針 3: 場合分け
\(Y\) の値が \(1,2,3\) の \(3\) 通りしかないので,条件分岐によって以下の操作を行えばよいです.
- \(Y=1\) の場合は \(X \times 2\) の値を出力する.
- \(Y=2\) の場合は \(X \times 4\) の値を出力する.
- \(Y=3\) の場合は \(X \times 8\) の値を出力する.
実装例
方針 1: ループ
C++ では for 文によってループを書くことができます.
#include <iostream>
using std::cin;
using std::cout;
int main (void) {
int x, y;
cin >> x >> y;
int ans = x;
for (int i = 0; i < y; i++) ans *= 2;
cout << ans << "\n";
return 0;
}
Python では for 文と range 関数を組み合わせることでループを書くことができます.
x, y = map(int, input().split())
ans = x
for i in range(y):
ans *= 2
print(ans)
方針 2: シフト演算・演算
C++ では 1 << y によって \(2^Y\) を表すことができます.この構文は \(2\) の非負整数乗にのみ使えます.
#include <iostream>
using std::cin;
using std::cout;
int main (void) {
int x, y;
cin >> x >> y;
int ans = x * (1 << y);
cout << ans << "\n";
return 0;
}
Python では 2 ** y によって \(2^Y\) を表すことができます.この構文は \(2\) 冪に限らず任意の値の冪乗に使えます.
x, y = map(int, input().split())
ans = x * (2 ** y)
print(ans)
なお,C++ では pow を,Python では math.pow を使うこともできるが,これらの関数は戻り値として浮動小数点数を返すため,精度落ちや出力形式ミスに十分注意する必要があります.
方針 3: 場合分け
C++ では if-else 文によって条件分岐を実現できます.
#include <iostream>
using std::cin;
using std::cout;
using std::cerr;
int main (void) {
int x, y;
cin >> x >> y;
int ans;
if (y == 1) {
ans = x * 2;
} else if (y == 2) {
ans = x * 4;
} else if (y == 3) {
ans = x * 8;
}
cout << ans << "\n";
return 0;
}
Python では if-elif 文によって条件分岐を実現できます.
x, y = map(int, input().split())
if y == 1:
ans = x * 2
elif y == 2:
ans = x * 4
elif y == 3:
ans = x * 8
print(ans)
この問題では \(Y\) の値が \(1,2,3\) のいずれかであることが保証されているので,いずれでもない場合の動作を書かなくても正常に動作します.
posted:
last update:
