1957年京都大学の入試問題について
解決済
回答 4
投稿 ・編集
- 評価
- クリップ 6
- VIEW 1,868
6桁の整数abcdefを適当に定めて、その2倍がcdefabとなるようにせよ。
ここにabcdefは、通常の十進法による記法であって、整数
10^5 a + 10^4 b + 10^3 c + 10^2 d + 10 e + f
を表わすとし、cdefabについても同様であるとする。
数学的解法によらないで、プログラミングで解いてください。
使用言語はC++、Ruby、Pythonのいずれかでお願いします。
ちなみに、私は以下のように解きました。
(a,b,c,d,e,fは同じ数字が重複してもよいと仮定)
(0..9).to_a.repeated_permutation(6){|i|
m = i.join.to_i
n = (i.join[2..-1] + i.join[0..1]).to_i
puts m if m * 2 == n && m.to_s.size == 6
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+8
(0..999999).each do |i|
j = (i % 10000) * 100 + (i / 10000)
puts i if i * 2 == j
end
実行結果
0
142857
285714
428571
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
[x for (x, y) in [( int( x ),int( x[2:] + x[:2] ) ) for x in map(''.join, itertools.product( '123456789', repeat=6 ) )] if x * 2 == y]
# [142857, 285714, 428571]
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
katoyさんの回答とfuzzballさんのコメントを参考に、abcdefが6桁の整数となる条件で求めました。
# 2 * abcdef = cdefab となる6桁の数値abcdefを求める
for i in range(100000,1000000): # 6桁
j = (i % 10000) * 100 + (i / 10000) # abcdef -> cdefab
if j == i * 2: # 2 * abcdef = cdefab となる
print("i=%d,j=%d" % (i,j))
結果
i=142857,j=285714
i=285714,j=571428
i=428571,j=857142
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
999999.times do |x|
a, b, c, d, e, f = x.to_s.split("")
puts x if x * 2 == [c, d, e, f, a, b].join.to_i
end
#6桁バージョン
999999.times do |x|
a, b, c, d, e, f = x.to_s.split("")
if [a, b, c, d, e, f].compact.length == 6
puts x if x * 2 == [c, d, e, f, a, b].join.to_i
end
end
katoy様のプログラムを参考に考えてみました。
優れている所はありません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2014/11/24 12:51
2014/11/24 14:18
(0..10**6).each {|i| puts i if (i * 2) == (i % 10**4) * 10**2 + (i / 10**4)}
2014/11/24 14:46
abcdef + abcdef = cdefab
として解くことも考えられます。
単に数字の組み合わせを総当たりで試すだけになりますが、
汎用の覆面算ソルバーを書くことも可能です。
- 覆面算ソルバー(足し算限定) [http://d.hatena.ne.jp/haruya12/20140531/1401561478]
上のページで示されたプログラムの最後の行を
Alphametic.new('ABCDEF + ABCDEF = CDEFAB')
として、実行したら、次の出力を得ました。
ABCDEF + ABCDEF = CDEFAB
428571 + 428571 = 857142
142857 + 142857 = 285714
285714 + 285714 = 571428
2017/03/17 09:01