4
0
paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

【Python3】【殿堂入りキャンペーン】名刺バインダー管理 (paizaランク B 相当)をやってみた

Last updated at Posted at 2024-07-19

問題:
あなたはこれまでに出会った人たちの名刺を集めています。名刺はバインダーに保存されており、1枚のファイルにはn個のポケットが横に並んでいます。表と裏の両面から名刺を眺めることができ、1つのポケットには2枚の名刺が背中合わせに入っています。

名刺の番号mが与えられるので、その名刺の裏側の名刺の番号を表示するプログラムを作成してください。番号mの名刺の裏面には必ず名刺が存在するものとします。

入力値:

n m

期待される出力値:

m番の名刺の裏側の番号

条件:
1 ≦ n ≦ 100,000
1 ≦ m ≦ 100,000

Pythonプログラム:

# 入力値を読み込み、nとmに分割
n, m = list(map(int, input().split()))

# 名刺のページ番号を計算
# (m-1) // (n * 2) は0始まりのページ番号、+1で1始まりのページ番号に変換
page = (m-1) // (n * 2) + 1

# ページの最後の名刺番号を計算
pmax = page * n * 2

# ページの最初の名刺番号を計算
pmin = pmax - (n * 2 - 1)

# 名刺の裏側の番号を計算
# pmax + pmin - m でm番の名刺の裏側の番号を求める
print(pmax + pmin - m)

コードの説明:

  1. 入力値の読み込み:

    n, m = list(map(int, input().split()))
    
    • 入力を読み込み、nm に分割して格納します。
  2. ページ番号の計算:

    page = (m-1) // (n * 2) + 1
    
    • (m-1) // (n * 2) は0始まりのページ番号を計算します。+1 することで1始まりのページ番号に変換します。
  3. ページの最初と最後の名刺番号の計算:

    pmax = page * n * 2
    pmin = pmax - (n * 2 - 1)
    
    • pmax はページの最後の名刺番号を計算します。
    • pmin はページの最初の名刺番号を計算します。
  4. 名刺の裏側の番号の計算:

    print(pmax + pmin - m)
    
    • pmax + pmin - mm 番の名刺の裏側の番号を計算します。
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0