* 練習問題 [#m8b47d0f]
#contents

* これは何? [#x9ab58f6]

[[練習問題(アルゴリズム編)]]もご覧ください。~
練習問題を集めてみました。~
言語は問いません。入力出力は特に問いません。~
キー入力でもファイルでもソースにべた書きでもいいです。

答えは誰かが書いてくれます。それまではスレで聞いてください。

** 問題一覧 [#nfec0c0a]

*** ループ練習 [#eb2c4338]

Hello World![改行]を5回表示させてください。 
print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、~
ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。

-出力結果
 Hello World!
 Hello World!
 Hello World!
 Hello World!
 Hello World!

-解答例
--[[Java版>./解答例/ループ練習/JAVA]]
--[[C>./解答例/ループ練習/C]]
--[[Python>./解答例/ループ練習/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#a13940a0]]
--[[Scala>./解答例/Scala#ke7969de]]
--[[Scheme>./解答例/Scheme/練習問題解答例#i29c71f8]]

可能ならコマンドラインから入力を受け取って、n回表示するように改造してください。~
何回目のHello World!かも表示してみてください。

-実行例
 # java hellos 7
 Hello World! 1
 Hello World! 2
 Hello World! 3
 Hello World! 4
 Hello World! 5
 Hello World! 6
 Hello World! 7

-解答例
--[[Java版>./解答例/ループ練習2/JAVA]]
--[[C>./解答例/ループ練習2/C]]
--[[Python>./解答例/ループ練習2/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#ob0d5bdb]]
--[[Scala>./解答例/Scala#ybb0b896]]
--[[Scheme>./解答例/Scheme/練習問題解答例#s4350f12]]

***FizzBuzz [#t52e5a48]
-なんか偉い人が考えた問題
-ルールは以下の通り
++1から順番に数を表示する
++その数が3で割り切れるなら"Fizz"、5で割り切れるなら"Buzz"、両方で割り切れるなら"FizzBuzz"と表示する
-要するに"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ・・・"と出力される
-プログラマかどうかがわかるんだとさ

-実行例
 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 

-解答例

--[[C言語版>./解答例/FizzBuzz/C]]
--[[C++版>./解答例/FizzBuzz/C++]]
--[[C++(better C)版>練習問題/解答例/FizzBuzz/C++(better C)]]
--[[Perl版>プログラミング言語/Perl#jf556caa]]
--[[PostScript>./解答例/FizzBuzz/PostScript]]
--[[Prolog>./解答例/FizzBuzz/Prolog]]
--[[Python版>./解答例/FizzBuzz/Python]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#xb9545ca]]
--[[Common Lisp版>./解答例/FizzBuzz/lisp]]
--[[シェルスクリプト版>./解答例/FizzBuzz/ShellScript]]
--[[MASM版>./解答例/FizzBuzz/MASM]]
--[[Java版>./解答例/FizzBuzz/JAVA]]
--[[C#版>./解答例/FizzBuzz/CSharp]]
--[[Haskell>./解答例/Haskell/練習問題解答例#f4c6d1f7]]
--[[Excel VBA版>解答例/FizzBuzz/Excel VBA]]
--[[Scala>./解答例/Scala#ga808233]]
--[[Scheme>./解答例/Scheme/練習問題解答例#l501edf8]]
--[[D版>./解答例/FizzBuzz/D]]

***素数判定 [#o8db2119]
-与えられた数が素数かどうか調べる
-あるいは与えられた数までの素数を列挙する
-処理にかかった時間を計測しておくと、自分の技術向上に伴って処理時間が短くなっていくのがよくわかる

-解答例(判定)
--[[C言語版>./解答例/素数判定/C]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#u543d3a3]]
--[[Python版>./解答例/素数判定/Python]]
--[[C++版>練習問題/解答例/素数判定/C++]]
--[[C++(better C)版>練習問題/解答例/素数判定/C++(better C)]]
--[[perl版:http://vipprog.net/wiki/prog_lang/perl.html#t1d5fa2d]]
--[[Excel VBA版>練習問題/解答例/素数判定/Excel VBA]]
--[[Scala>./解答例/Scala#v8e35b34]]
--[[Scheme>./解答例/Scheme/練習問題解答例#jd32f6c4]]

-解答例(列挙)
--[[Java版>./解答例/素数を求める/Java]]
--[[C言語版>./解答例/素数を求める/C]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#e48df6ac]]
--[[Python版>./解答例/素数を求める/Python]]
--[[C++版>練習問題/解答例/素数判定/C++#wc8da776]]
--[[Haskell>練習問題/解答例/Haskell/練習問題解答例#ld4986f8]]
--[[Scala>./解答例/Scala#j53b2078]]

***平方根を求めてみる [#y8402045]
-与えられた数の平方根を求める
-当然ライブラリは使わない

-解答例
--[[C++(better C)版>./解答例/平方根/C++(better C)#h1b5f416]]
--[[C言語版>./解答例/平方根/C言語]]
--[[Perl版>プログラミング言語/Perl#r50c480e]]
--[[Python版>./解答例/平方根/Python]]
--[[Java>./解答例/平方根/Java]]
--[[Haskell>練習問題/解答例/Haskell/練習問題解答例#nc756426]]

*** 英単語しりとりプログラム [#x38ec247]

あらかじめ用意した「辞書ファイル」の内容に基づいて、ユーザーとしりとりをする対話型プログラム。~
辞書ファイルのフォーマットは、キャリッジリターンで区切られた半角英字のみのテキストファイルとする。

このプログラムのおおまかな仕様を以下に示す。

-乱数により、先攻と後攻を決定する。ユーザーが先攻の場合はランダムで最初の文字を決定し、コンピュータが先攻の場合はランダムで最初の単語を出力する 
-ユーザーが辞書にない単語を入力すると再入力を促す(半角英字以外の文字が入っていてもメッセージは同じでよい) 
-すでに使われた単語をユーザーが入力すると、以下のメッセージを出力して終了する。「その言葉は [回数] 回目に [あなた|わたし] が使用しています。わたしの勝ちです。今回のしりとりでは [使用単語数] 個の単語を使用しました。」 
-コンピュータの番で、辞書の中に使える単語が残ってない場合、以下のメッセージを出力して終了する。「まいりました!あなたの勝ちです。 今回のしりとりでは [使用単語数] 個の単語を使用しました。」

[[コードリーディング(Ruby)はこちら>プログラミング言語/Ruby/コードリーディング/しりとりゲーム]]

-その他の解答例
--[[Haskell>./解答例/Haskell/練習問題解答例#d52f1308]]
--[[Python>./解答例/英単語しりとりプログラム/Python/]]

***うるう年測定 [#i0d67516]
入力された整数がグレゴリオ暦(いつも使ってるやつ)でうるう年であるか判定せよ

[[閏年-wikipedia>http://ja.wikipedia.org/wiki/%E3%81%86%E3%82%8B%E3%81%86%E5%B9%B4]]

-出力例
 1992年はうるう年です
 2000年はうるう年です
 2001年はうるう年ではありません

-解答例
--[[C言語版>./解答例/うるう年測定/C]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#r3e10171]]
--[[Python版>./解答例/うるう年判定/Python]]
--[[Scheme版>./解答例/うるう年測定/Scheme]]
--[[Haskell>./解答例/Haskell/練習問題解答例#rc63b4a5]]
--[[Scala>./解答例/Scala#xd158eb1]]
--[[Scheme>./解答例/Scheme/練習問題解答例#l746f1d2]]

***ハノイの塔 [#cce62ade]
与えられたn枚の円盤を用いたハノイの塔を''再帰的アルゴリズム''を用いて解くプログラムを作成せよ。出力は円盤の移動の記録及び手数とする。

[[ハノイの塔-wikipedia>http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94]]

-解答例
--[[C++版>./解答例/ハノイの塔/C++]]
--[[Prolog版>./解答例/ハノイの塔/Prolog]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#r9efcc5f]]
--[[Python版>./解答例/ハノイの塔/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#y79a264b]]

***転置行列 [#q9f27a17]
入力された行列の転置行列を求めよ

-入力例
 1 2 3
 4 5 6
 7 8 9
-出力例
 1 4 7
 2 5 8
 3 6 9

[[転置行列-wikipedia>http://ja.wikipedia.org/wiki/%E8%BB%A2%E7%BD%AE%E8%A1%8C%E5%88%97]]

-解答例
--[[C版>./解答例/転置行列/C]]
--[[C++版>./解答例/転置行列/C++]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#o1ceec0c]]
--[[Python版>./解答例/転置行列/Python]]
--[[Excel VBA版>解答例/転置行列/Excel VBA]]
--[[Scala>./解答例/Scala#o9735320]]
--[[Haskell>./解答例/Haskell/練習問題解答例#b483a0f8]]

***線形合同法 [#pc7a3f04]
線形合同法を用いて0<=x<1の範囲の乱数を発生させるプログラムを作成せよ。M=65536(=2^16),A=997,B=1,Xの初期値を12345として100個の乱数を発生させ,その値と平均を出力しなさい。

[[線形合同法-wikipedia>http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95]]

※実際のプログラムにこの乱数を使ってはいけません。あくまで初心者用課題です。実際はメルセンヌツイスタでも使いましょう。

-出力例
 0.8047  0.2430  0.2977  0.7755  0.1405  0.1119  0.5266  0.0315  0.4149  0.6418
 0.9050  0.2534  0.6121  0.2548  0.0421  0.9879  0.9665  0.6227  0.7974  0.0321
 0.9626  0.6673  0.2803  0.4326  0.3346  0.5605  0.8500  0.4865  0.0669  0.7243
 0.1161  0.7406  0.3940  0.8304  0.9378  0.9918  0.8002  0.8008  0.4246  0.2869
 0.0199  0.8074  0.9357  0.9228  0.0374  0.2719  0.0807  0.4464  0.0871  0.8663
 0.7188  0.6546  0.6535  0.5125  0.9595  0.5943  0.4708  0.3823  0.1620  0.5622
 0.5235  0.8976  0.9359  0.1054  0.0459  0.7303  0.1404  0.0206  0.5224  0.8023
 0.8850  0.3548  0.6873  0.2854  0.5290  0.4047  0.5252  0.6015  0.6818  0.7174
 0.2702  0.4225  0.2027  0.0897  0.4069  0.6702  0.2012  0.5684  0.6695  0.5166
 0.0366  0.4504  0.0425  0.3835  0.3182  0.2826  0.7602  0.9427  0.9056  0.8619
 
 平均=0.5070

-解答例
--[[C言語版>./解答例/線形合同法/C]]
--[[Excel VBA版>解答例/線形合同法/Excel VBA]]
--[[Haskell>./解答例/Haskell/練習問題解答例#r62dac48]]
--[[Python>./解答例/線形合同法/Python]]

***数当てゲーム [#d082e883]
これは答えの数を探すゲームです。適当な数を入れると正解よりも大きいか小さいか,または正解であるか出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。

-解答例
--[[Java版>./解答例/数当てゲーム/Java]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#b1a863ae]]
--[[Python版>./解答例/数当てゲーム/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#u56f4eea]]

***数当てゲーム その2(Hit&Blow) [#ffeaab60]
これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。~
具体的には~
正解が1234だとして~
4321 と入力 4blow~
1245 と入力 2hit 1blow~
なおルール上4422などのゾロ目の正解は出ないようにしましょう。~
また、先頭が0だとn桁の数字じゃなくなるのでせっかくなので0は発生させないようにしましょう。

-解答例
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#od23e209]]
--[[Python>./解答例/Hit and Blow/Python]]

***カレンダー出力 [#i5e3e061]
年と月を入力してカレンダーを出力する。
画面フォーマットはCUI,GUI,WEB等自由とする

-解答例
--[[C言語版>./解答例/カレンダー出力/C]]
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#v8444f3a]]
--[[Python版>./解答例/カレンダー出力/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#j1958644]]
--[[Scala>./解答例/Scala#xde7305e]]

***配列いじり [#w5561ad6]
配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。
例:
-置換前
 3 5 2 4 2
-置換後
 3 0 0 0 0

-解答例
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#d5c23dc0]]
--[[Perl版>http://vipprog.net/wiki/prog_lang/perl.html#yefe9978]]
--[[Python>./解答例/配列いじり/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#l6e6adf8]]
--[[Scala>./解答例/Scala#ode26856]]

***Caesar暗号解読 [#h54a0395]
Caesar暗号を解読するプログラムを作り,暗号を解読してください。
暗号鍵(何文字ずらすか)は不明ですが、文字列に"person"が含まれることがわかっています。ご利用ください。
Caesar暗号については[[シーザー暗号-wikipedia>http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7]]を参照してください。
-暗号文
"qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj"
(最初と最後のダブルクォートは除く)
-使用される文字の列
"abcdefghijklmnopqrstuvwxyz .,-"
(ダブルクォートは除く。空白もあります。注意してください。暗号文にセミコロン";"が含まれています。これは置換するべき文字列に含まれていないので、そのままにしてください。)

-解答例
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#h97ae94f]]
--[[C言語版>./解答例/Caesar暗号解読/C]]
--[[Perl版>プログラミング言語/Perl#o607f99e]]
--[[Python版>./解答例/Caesar暗号解読/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#v9844940]]
--[[Scala>./解答例/Scala#g5a75e45]]

***フィボナッチ数列 [#p59f794f]
フィボナッチ数列とは下記の数列のように今の項と前項の和が次の項となるような数列です。

1 1 2 3 5 8 13 21 34 55 89 144

課題1 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いて書いて下さい。ただしnはコマンドライン引数で得るものとします。
-解答例
--[[C言語版>./解答例/フィボナッチ数列1/C]]
--[[Haskell>./解答例/Haskell/練習問題解答例#mf294cb0]]
--[[Scala>./解答例/Scala#v6061921]]
--[[Scheme>./解答例/Scheme/練習問題解答例#l1f0f136]]
--[[Python版>./解答例/フィボナッチ数列1/Python]]

課題2 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いずに書いて下さい。ただしnはコマンドライン引数で得るものとします。

-解答例
--[[C言語版>./解答例/フィボナッチ数列2/C]]
--[[Java版>./解答例/フィボナッチ数列2/Java]]
--[[Python版>./解答例/フィボナッチ数列2/Python]]

課題3 再帰呼出しを用いた場合と用いない場合、どちらがどのような点で優れているかを考えて下さい。

-解答例
--[[Blog参照>http://vipprog.blog108.fc2.com/blog-entry-9.html]]←リンク切れ。

***Base64 [#u8004ae1]
入力されたデータをエンコード/デコードするプログラムを作成せよ。
データの入出力方法は自由とする。

[[Base64-wikipedia>http://ja.wikipedia.org/wiki/Base64]]

-解答例
--[[Ruby版>プログラミング言語/Ruby/練習問題解答例#q2bfc331]]
--[[Python>./解答例/Base64/Python]]

***累乗 [#x6e30de3]
aのn乗を返すような2引数の関数(メソッド)を下記の方法で作って下さい。ただしa, nは正整数とします。(0や負の数に関しては考慮しなくても結構です。)~
課題1. aをn回かけるループ文を使って作って下さい。

課題2. 課題1で作った物より高速なものを作って下さい。(計算時間のオーダーがlg(n)となるように)。~
計算時間のオーダーがlg(n)というのは平たく言えばnに対して計算の手間(例えばループ回数)がおおよそlg(n)回ということです。~
ここではnが8程度ならば凡そ3回、1024程度ならば凡そ10回の手間で計算できる、というように解釈していただければ構いません。

-解答例
--[[課題1 (Python)>./解答例/累乗/課題1/Python]]
--[[課題1 (Java)>./解答例/累乗/課題1/Java]]
--[[課題1 (Haskell)>./解答例/Haskell/練習問題解答例#b0e3fd20]]
--[[課題1 (Scheme)>./解答例/Scheme/練習問題解答例#ybfcac36]]
--[[課題2 (Python)>./解答例/累乗/課題2/Python]]
--[[課題2 (Java)>./解答例/累乗/課題2/Java]]
--[[課題2 (Haskell)>./解答例/Haskell/練習問題解答例#w1eaeb0e]]

***二次方程式の解 [#p5d7bfb2]
課題1. 二次方程式
 ax^2+bx+c=0
の解を求める3引数の関数(メソッド)を作って下さい。ただし、aは0ではなく、虚数解は考えなくても結構です。
課題2. 上記で作ったプログラムにa=0.0000000045, b=10, c=1などの値を代入し、得られた結果と
実際の解とを比較し大きな誤差があった場合プログラムの問題点を考察して下さい。
可能ならばより正確な答えがでる関数を作って下さい。

※これはdoubleやfloatの誤差が問題となる初歩的な問題です。

-解答例
--[[C>./解答例/二次方程式の解/C]]
--[[Excel VBA>/解答例/二次方程式の解/Excel VBA]]

***世界のナベアツ問題 [#t52a5a48]
-3の倍数と3のつく数字のときだけアホになります
-ルールは以下の通り
++1から順番に数を表示する
++その数が3の倍数、もしくは3のつく数字であれば"Aho"と表示する
-要するに"1 2 Aho 4 5 Aho 7 8 Aho 10 11 Aho Aho 14 ・・・"と出力される
-オモロー

-実行例
 1 2 Aho 4 5 Aho 7 8 Aho 10 11 Aho Aho 14 Aho 16 17 Aho 19 20 Aho 22 Aho Aho 25 26 Aho 28 29 Aho Aho Aho Aho Aho Aho Aho Aho Aho Aho 40 

-解答例
--[[C言語>./解答例/世界のナベアツ問題/C]]
--[[Python>./解答例/世界のナベアツ問題/Python]]
--[[Excel VBA>解答例/世界のナベアツ問題/Excel VBA]]
--[[Common Lisp>./解答例/世界のナベアツ問題/Common Lisp]]
--[[Haskell>./解答例/Haskell/練習問題解答例#p9107c97]]

***シェルピンスキーのギャスケット [#w9c362ad]
-フラクタル図形の一種
-[[シェルピンスキーのギャスケット-wikipedia>http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%94%E3%83%B3%E3%82%B9%E3%82%AD%E3%83%BC%E3%81%AE%E3%82%AE%E3%83%A3%E3%82%B9%E3%82%B1%E3%83%83%E3%83%88]]等を参考にし、これを描画するプログラムを書いてください。
-C言語の解答は基本情報技術者H15春午後の問題問6を参照
-解答例
--[[C>./解答例/シェルピンスキーのギャスレット/C]]
--[[Python>./解答例/シェルピンスキーのギャスレット/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#r0c059cc]]

***連立方程式を解くプログラム [#i94b632d]
-クラーメル法でもガウス法でもかまいません

-解答例
--[[C>./解答例/連立方程式を解く/C]]
--[[C++>./解答例/連立方程式を解く/C++]]
--[[Python>./解答例/連立方程式を解く/Python]]

***干支を求めるプログラム [#v95a6d75]
-西暦から干支(十二支)を求める
-[[計算方法>http://hishoshou.blog108.fc2.com/blog-entry-6.html]]
-解答例
--[[Excel VBA>練習問題/解答例/干支を求めるプログラム/Excel VBA]]
--[[Python>練習問題/解答例/干支を求めるプログラム/Python]]

***星座を求めるプログラム [#k6fe2466]
-月日から星座を求める
-[[星座と月日>http://www.geocities.jp/koci_sax/holo.htm]]
-解答例
--[[Python>練習問題/解答例/星座を求めるプログラム/Python]]
--[[Excel VBA>練習問題/解答例/星座を求めるプログラム/Excel VBA]]

***配列から大きい要素とその添字を求めるプログラム [#u170a96a]
-http://www.logsoku.com/r/news4vip/1377395050/14n
-配列に負でない整数が格納されている。これらの整数の中から大きい順に3つの数字とその添字を出力せよ。
-入力例
 unsigned int array[8] = {12, 6, 8, 3, 10, 1, 0, 9};
-出力例
 0 -> 12 
 4 -> 10 
 7 -> 9 
-解答例
--[[Python>練習問題/解答例/配列から大きい要素とその添字を求めるプログラム/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#vaeff67a]]

***迷路を解くプログラム [#d4135691]
-http://www.logsoku.com/r/news4vip/1377327045/61-66n
-10 x 10の迷路を解く
-入力は、4辺のどこか2箇所が必ず開いている(スタートorゴール)ものとする 
-移動方向は縦横のみ、斜めはなし
-入力例
 # ########
 # ## ### #
 #    ##  #
 ####    ##
 # ## #####
 #    #   #
 # #### # #
 #      # #
 ## ## ## #
 ######## #
-出力例
 #+########
 #+## ### #
 #++++##  #
 ####+   ##
 # ##+#####
 #++++#+++#
 #+####+#+#
 #++++++#+#
 ## ## ##+#
 ########+#
-解答例
--[[Haskell>./解答例/Haskell/練習問題解答例#vf7037b3]]
--[[Python>./解答例/迷路を解くプログラム/Python]]

***島を数える [#e3550484]
-h x w からなるマップが与えられる
-マップの各マスは海(.)または陸(#)からなる
-辺で (左右上下に) 連結した陸を一つの島と数える
-入力は一行目に2つの整数 h w、2行目から続くh行に各行長さwの文字列としてマップが与えられる
-入力例
 5 3
 ##.
 #.#
 #.#
 .##
 #..
-出力例
 3
-解答例
--[[C++>./解答例/C++11/練習問題解答例#e3550484]]

***クリティカルパス [#o006da2d]
-結合点pから結合点qまでの作業にかかる日数が列挙されているものとする。
-結合点Aから結合点A+n-1(nは結合点の数: n=7のときA+n-1はG)までのクリティカルパスとその所要日数を求めよ。
-入力例 (1行目は結合点の数と作業の数)
 7 9
 A B 10
 A C 3
 B D 4
 B E 7
 C D 7
 C F 9
 D E 2
 E G 1
 F G 7
-出力例
 A -> C -> F -> G
 19
-解答例
--[[Python>./解答例/クリティカルパス/Python]]

***ひらがな2文字をランダムで出力するプログラム [#s98f80e0]
-http://www.logsoku.com/r/news4vip/1378302106/1-4n
-「ひらがな二文字をランダムで出力するプログラムつくってお願いします」
-「猫の名前決めるのに二文字がいいと思ったんだけど思いつかないからランダムで出しまくって決めようかと」
-解答例
--[[Python>練習問題/解答例/ひらがな2文字をランダムで出力するプログラム/Python]]
--[[Haskell>./解答例/Haskell/練習問題解答例#l32d6dde]]
--[[C>•練習問題/解答例/ひらがな2文字をランダムで出力するプログラム/C]]
--[[C++>練習問題/解答例/ひらがな2文字をランダムで出力するプログラム/C++]]
--[[Scala>./解答例/Scala#r8373c52]]

***オリンピックの開催年を出力するプログラム [#o373ec6d]
- 近代オリンピック(夏季)の開催年と第何回開催(第Nオリンピアード)かを出力するプログラムを出力せよ。
- 第1回は1896年(アテネ)。
- 第6回(1916年:ベルリン)は第一次世界大戦により開催されなかった。
- 第12回(1940年:ヘルシンキ), 第13回(1944年:ロンドン)は第二次世界大戦により開催されなかった。
- 開催されなかった年は出力しないこと。
- 開催されなかった場合もオリンピアードの回数はカウントされるので、2012年(ロンドン)は第30回となる。
-出力例
 第 1回  1896年
 第 2回  1900年
 第 3回  1904年
 第 4回  1908年
 第 5回  1912年
 第 7回  1920年
 第 8回  1924年
 ・
 ・
 ・
 第30回  2012年
-解答例
--[[Python>./解答例/オリンピックの開催年を出力するプログラム/Python]]

***Nクイーン問題 [#x443bc7a]
- http://www.logsoku.com/r/news4vip/1379246445/1n
- 7x7のマス目にチェスのクイーンがお互いを取り合うことのないようにできる限りの数置くことを考える。
- 入力例のように既に2つのクイーン(Q)が置かれているとき、どのように置けばよいか。
- 入力例
 .......
 .......
 ..Q....
 .......
 ...Q...
 .......
 .......
- 解答例
--[[Python>./解答例/Nクイーン問題/Python]]

***平方根を簡単な形にするプログラム [#k489212c]
- 例えば√8なら2√2にする。
- √10000 (=100)まで列挙すること。
- 出力例
 √1 -> 1
 √2 -> √2
 √3 -> √3
 √4 -> 2
 √5 -> √5
 √6 -> √6
 √7 -> √7
 √8 -> 2√2
 √9 -> 3
 √10 -> √10
 √11 -> √11
 √12 -> 2√3
 √13 -> √13
 √14 -> √14
 √15 -> √15
 √16 -> 4
 √17 -> √17
 √18 -> 3√2
 √19 -> √19
 .
 .
 .

- 解答例
--[[Python>./解答例/平方根を簡単な形にするプログラム/Python]]

***有理化するプログラム [#p4f7bed2]
- √a/√bを有理化せよ。
- aは[1, 100]、bは[2, 100]とする。
- 出力例
 √1/√2 -> √2/2
 √1/√3 -> √3/3
 √1/√4 -> 1/2
 √1/√5 -> √5/5
 √1/√6 -> √6/6
 √1/√7 -> √7/7
 √1/√8 -> √2/4
 √1/√9 -> 1/3
 √1/√10 -> √10/10
 √1/√11 -> √11/11
 √1/√12 -> √3/6
 .
 .
 .
 √100/√98 -> 5√2/7
 √100/√99 -> 10√11/33
 √100/√100 -> 1

- 解答例
--[[C>./解答例/有理化するプログラム/C]]
--[[Python>./解答例/有理化するプログラム/Python]]

***ボウリングのスコア計算 [#x0c80604]
ボウリングのスコアを計算する。~
1行目は投げた回数、2行目は倒したピンの数が入力される。~
不正な値は入力されないものとする。
- 入力例1
 20
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 出力例1
 0
- 入力例2
 12
 10 10 10 10 10 10 10 10 10 10 10 10
- 出力例2
 300
- 入力例3
 19
 6 2 0 3 5 5 0 8 10 1 9 3 6 6 4 10 5 5 3
- 出力例3
 124
- 入力例4
 21
 1 9 1 9 1 9 1 0 1 9 1 9 1 9 0 1 1 9 1 9 4
- 出力例4
 92
- 入力例5
 20
 1 9 2 8 3 7 4 6 10 0 0 6 4 7 3 8 2 9 1 2
- 出力例5
 135
 
***ボウリングのスコア計算2 [#v75010cb]
ボウリングのスコアを計算し、各フレームでそのフレームまでのスコアを出力する。~
1行目は投げた回数、2行目は倒したピンの数が入力される。~
不正な値は入力されないものとする。
- 入力例1
 20
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 出力例1
 0 0 0 0 0 0 0 0 0 0
- 入力例2
 12
 10 10 10 10 10 10 10 10 10 10 10 10
- 出力例2
 30 60 90 120 150 180 210 240 270 300
- 入力例3
 19
 6 2 0 3 5 5 0 8 10 1 9 3 6 6 4 10 5 5 3
- 出力例3
 8 11 21 29 49 62 71 91 111 124
- 入力例4
 21
 1 9 1 9 1 9 1 0 1 9 1 9 1 9 0 1 1 9 1 9 4
- 出力例4
 11 22 33 34 45 56 66 67 78 92
- 入力例5
 20
 1 9 2 8 3 7 4 6 10 0 0 6 4 7 3 8 2 9 1 2
- 出力例5
 12 25 39 59 69 69 86 104 123 135

***回文判定プログラム [#v75010cb]
"N","O","*"の何れかで構成された文字列を受取り、"*"は"N"か"O"に変換して回文を作成する関数。

ただし"N"の変換には10円、"O"の変換には15円かかるものとする。~
できるだけ総額が安くなるように回文を作成し、「回文」と「かかった金額」を返却すること。~
※返却型は配列でも、クラスや構造体でもよいが["回文",かかった金額]とする~

<条件>~
- 作成できない場合、回文は「受け取った文字列」金額は「-1」を返却すること。~
- ソースは可能な限りシンプルに記述すること。~
- 使用する言語は何でもよい。~
-----------------------------------------------------------------------------
- 疑似コード例~
~
 public static object[] ToPalindrome(string src){略};~
 ToPalindromically("NOO*");  //return["NOON",10]~
 ToPalindromically("NO*N");  //return["NOON",15]~
 ToPalindromically("NO");    //return["NO",-1]~
 ToPalindromically("O*O");   //return["ONO",10]~

- 解答例
--[[Python>./解答例/回文判定プログラム/Python]]

**解答例 [#ebb87919]
[[別ページ>./解答例]]に記載