質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python

    8674questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Ruby

    7968questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • C++

    3625questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1957年京都大学の入試問題について

解決済

回答 4

投稿 ・編集

  • 評価
  • クリップ 6
  • VIEW 1,394

manman

score 258

a,b,c,d,e,fをいずれも0から9までの数字とする。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+8

(0..999999).each do |i|
  j = (i % 10000) * 100 + (i / 10000)
  puts i if i * 2 == j
end
実行結果
0
142857
285714
428571

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/24 12:51

    katoyさんのように文字列で処理しない方が無駄がなくていいですね。

    キャンセル

  • 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

    a, b, ... f に異なる数字を割り当てるとするなら、覆面算
      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

    力技のほうがシンプルに記述できる良い(?)例ですね。面白かったです。

    キャンセル

+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]

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/24 13:25

    問題文に「a,b,c,d,e,fをいずれも0から9までの数字とする。 」とあるので、
    '0123456789'の直積の方が良いと思われます。
    '0123456789'の直積に変更すると出力結果は
    [0, 142857, 285714, 428571]
    となります。

    キャンセル

  • 2014/11/24 13:27

    あ、おっしゃるとおりですね。失礼しました。

    キャンセル

  • 2017/03/17 08:42

    0-9にするのは正しいと思いますが、「6桁の整数」とあるので結果的に0は含まないのが正解ではないでしょうか?

    キャンセル

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/17 10:02 編集

    cdefabについては6桁であると書かれていません。

    キャンセル

  • 2017/03/17 10:08

    確かに!ご指摘ありがとうございます。回答修正しました。

    キャンセル

  • 2017/03/17 10:23

    調子に乗ってもう一つ書きますが、「全て求めよ」ではないので1つ目を出力して終了してもいいんじゃないかと思ったり。

    キャンセル

  • 2017/03/17 10:33

    ですね。競技プログラミング的な問題では、計算時間がシビアなので「ひとつ求めよ」か「すべて求めよ」かたいてい明記されてますね。

    キャンセル

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様のプログラムを参考に考えてみました。
優れている所はありません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Python

    8674questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Ruby

    7968questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • C++

    3625questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。