最近の記事

2023日本数学オリンピック予選問題の中でプログラミングの練習問題にしたら面白そうな問題

はじめに 毎年、日本数学オリンピックの予選問題を趣味で解いています。その中で、プログラミングの練習問題にしたら面白いかなと思った2023年の問題を紹介します。 問題1(問題文) (Pythonコード) 愚直に 1 から順に試していくだけ。 while の練習に良いかな。 i = 1while True: j = (i + 10) ** 0.5 if j == int(j): k = (i * 10) ** 0.5 if k ==

    • 「Python で文字図形を描く」のコードを考えてみた

      はじめに大森武さんの「Python で文字図形を描く」のコードを考えてみました。 図形1 四角形◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯ for _ in range(5): print("◯" * 5) 「 "◯" * 5 」の利用は、出題の意図と違うと思いますが。 print(("◯"*5 + "\n") * 5) for も使っていません。「 "\n" 」で改行します。 図形2 三角形◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ for i in ran

      • 「paizaの森練習問題コンテスト過去問題3」をpythonで解いてみた

        s = input()print(s[::-1]) s1, s2 = input().split()print(s1 + s2) s = input()print(s.lower()) n = int(input())capslock = Falseans = ""for _ in range(n): c = input().split() if c[0] == "capslock": capslock = not capslock

        • paizaの「第1回P共通テスト過去問題 Q2: rot-x」をpythonで解いてみた

          import collectionsn = int(input())s = input()t = input()l = []for i in range(n): l.append((ord(t[i]) - ord(s[i])) % 26)c = collections.Counter(l)x = c.most_common()[0][0]if len(c) == 1: print(f"correct rot-{x}")elif len(c) == 2 and c.

        2023日本数学オリンピック予選問題の中でプログラミングの練習問題にしたら面白そうな問題

        • 「Python で文字図形を描く」のコードを考えてみた

        • 「paizaの森練習問題コンテスト過去問題3」をpythonで解いてみた

        • paizaの「第1回P共通テスト過去問題 Q2: rot-x」をpythonで解いてみた

          「paizaの森練習問題コンテスト過去問題2」をpythonで解いてみた

          # 条件分岐はif文で記述することが推奨されているが、# 分岐が多くなるので、# dictionary(辞書)を使用して、可読性を高くしてみた。colour = { 1 : "white", 2 : "black", 3 : "red", 4 : "blue", 5 : "yellow", 6 : "green", 7 : "orange", 8 : "pink", 9 : "purple"}n = int(input()

          「paizaの森練習問題コンテスト過去問題2」をpythonで解いてみた

          「paizaの森練習問題コンテスト過去問題1」をpythonで解いてみた

          # python にはswitch文やcase文がない。# 代わりに「if...elif...else」文で条件分岐を記述する。s = input()if s == "baseball": print(9)elif s == "soccer": print(11)elif s == "rugby": print(15)elif s == "basketball": print(5)else: # volleyball print(6) h =

          「paizaの森練習問題コンテスト過去問題1」をpythonで解いてみた

          2022 日本数学オリンピック予選 第9問 ヒント

          問題$${1, 2, . . . , 1000}$$ の並べ替え $${(p_1, p_2, . . . , p_{1000})}$$ であって, 任意の $${1}$$ 以上 $${999}$$ 以下の整数 $${i}$$ に対して, $${p_i}$$ が $${i}$$ の倍数であるようなものはいくつあるか. 公益財団法人 数学オリンピック財団 ヒント1000 の移動先を考える。 移動できるのは、1000 の約数の位置である。 $$ \begin{array}{|c

          2022 日本数学オリンピック予選 第9問 ヒント

          2022日本数学オリンピック予選 第7問 ヒント

          問題ヒント辺 $${AC}$$ 上に$${∠GDC=∠FDB}$$ となる点 $${G}$$ をとり、補助線 $${GD}$$ を引く。 解説図は自分で書いてください。点 $${E}$$ は 2 通りの取り方がありますが、頂点 $${C}$$ に近い方で書いてください。 辺 $${AC}$$ 上に$${∠GDC=∠FDB}$$ となる点 $${G}$$ をとる。 $${△GCD}$$ と $${△FBD}$$ において   $${∠GDC=∠FDB}$$   $${∠GC

          2022日本数学オリンピック予選 第7問 ヒント

          2022日本数学オリンピック予選 第8問 ヒント

          次のように書き出せば求まります。 $$ \begin{array}{r|c:c:c:c:c:c} a_n & 1 & 2 & 3 & 4 & 5 & · · · \\ \hline {a_n}^2-(n+5)^2 & -35 & -45 & -55 & -65 & -75 & · · · \end{array} $$ $$ \begin{array}{r|c:c:c:c:c:c} a_n & 2 & 3 & 4 & 5 & 6 & · · · \\ \hline {

          2022日本数学オリンピック予選 第8問 ヒント

          n進法をm進法へ変換するpythonコード

          10進法を2進法へdecimal_number = input('10進数を入力してください ')d = int(decimal_number)ans = '' # ビット列を記録するための変数while d: r = d % 2 """ 新しく求めたビット r をstr型に変換し、 記録していたビット列 ans の左に結合する。 """ ans = str(r) + ans d = d // 2print(f'{decim

          n進法をm進法へ変換するpythonコード

          ユークリッドの互除法と再帰関数

          ユークリッドの互除法$${a}$$, $${b}$$ を自然数とする。 $${a}$$, $${b}$$ の最大公約数は、次のようにして求めることができる。 $${a}$$ を $${b}$$ で割った余り $${r}$$ を求める $${b}$$ を $${r}$$ で割った余り $${r_1}$$ を求める $${r}$$ を $${r_1}$$ で割った余り $${r_2}$$ を求める 以下同様に繰り返し、 $${r_{n−1}}$$ を $${r_n}$$ で割った

          ユークリッドの互除法と再帰関数

          原始ピタゴラス数を高速に求める

          原始ピタゴラス数生成公式$${m, n}$$ を次の 3 条件を満たす整数とする。 (1) $${m>n>0}$$ (2) $${m−n}$$ は奇数 (3) $${gcd(m,n)=1}$$ このとき,$${(a,b,c) = (m^2−n^2,2mn,m^2+n^2)}$$ は,原始ピタゴラス数である。逆に,すべての原始ピタゴラス数は上の形で表すことができる。 原始ピタゴラス数生成公式を利用した python コード# a, b の最大公約数(互除法利用)def g

          原始ピタゴラス数を高速に求める