練習問題(アルゴリズム編)もご覧ください。
練習問題を集めてみました。
言語は問いません。入力出力は特に問いません。
キー入力でもファイルでもソースにべた書きでもいいです。
答えは誰かが書いてくれます。それまではスレで聞いてください。
Hello World![改行]を5回表示させてください。
print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、
ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。
Hello World! Hello World! Hello World! Hello World! Hello World!
可能ならコマンドラインから入力を受け取って、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
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
あらかじめ用意した「辞書ファイル」の内容に基づいて、ユーザーとしりとりをする対話型プログラム。
辞書ファイルのフォーマットは、キャリッジリターンで区切られた半角英字のみのテキストファイルとする。
このプログラムのおおまかな仕様を以下に示す。
入力された整数がグレゴリオ暦(いつも使ってるやつ)でうるう年であるか判定せよ
1992年はうるう年です 2000年はうるう年です 2001年はうるう年ではありません
与えられたn枚の円盤を用いたハノイの塔を再帰的アルゴリズムを用いて解くプログラムを作成せよ。出力は円盤の移動の記録及び手数とする。
入力された行列の転置行列を求めよ
1 2 3 4 5 6 7 8 9
1 4 7 2 5 8 3 6 9
線形合同法を用いて0<=x<1の範囲の乱数を発生させるプログラムを作成せよ。M=65536(=2^16),A=997,B=1,Xの初期値を12345として100個の乱数を発生させ,その値と平均を出力しなさい。
※実際のプログラムにこの乱数を使ってはいけません。あくまで初心者用課題です。実際はメルセンヌツイスタでも使いましょう。
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
これは答えの数を探すゲームです。適当な数を入れると正解よりも大きいか小さいか,または正解であるか出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
具体的には
正解が1234だとして
4321 と入力 4blow
1245 と入力 2hit 1blow
なおルール上4422などのゾロ目の正解は出ないようにしましょう。
また、先頭が0だとn桁の数字じゃなくなるのでせっかくなので0は発生させないようにしましょう。
年と月を入力してカレンダーを出力する。 画面フォーマットはCUI,GUI,WEB等自由とする
配列の先頭はそのままに、先頭以外の要素をすべて0に置き換える。 例:
3 5 2 4 2
3 0 0 0 0
Caesar暗号を解読するプログラムを作り,暗号を解読してください。 暗号鍵(何文字ずらすか)は不明ですが、文字列に"person"が含まれることがわかっています。ご利用ください。 Caesar暗号についてはシーザー暗号-wikipediaを参照してください。
フィボナッチ数列とは下記の数列のように今の項と前項の和が次の項となるような数列です。
1 1 2 3 5 8 13 21 34 55 89 144
課題1 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いて書いて下さい。ただしnはコマンドライン引数で得るものとします。
課題2 フィボナッチ数列の第n項を求めるプログラムを再帰呼出しを用いずに書いて下さい。ただしnはコマンドライン引数で得るものとします。
課題3 再帰呼出しを用いた場合と用いない場合、どちらがどのような点で優れているかを考えて下さい。
入力されたデータをエンコード/デコードするプログラムを作成せよ。 データの入出力方法は自由とする。
aのn乗を返すような2引数の関数(メソッド)を下記の方法で作って下さい。ただしa, nは正整数とします。(0や負の数に関しては考慮しなくても結構です。)
課題1. aをn回かけるループ文を使って作って下さい。
課題2. 課題1で作った物より高速なものを作って下さい。(計算時間のオーダーがlg(n)となるように)。
計算時間のオーダーがlg(n)というのは平たく言えばnに対して計算の手間(例えばループ回数)がおおよそlg(n)回ということです。
ここではnが8程度ならば凡そ3回、1024程度ならば凡そ10回の手間で計算できる、というように解釈していただければ構いません。
課題1. 二次方程式
ax^2+bx+c=0
の解を求める3引数の関数(メソッド)を作って下さい。ただし、aは0ではなく、虚数解は考えなくても結構です。 課題2. 上記で作ったプログラムにa=0.0000000045, b=10, c=1などの値を代入し、得られた結果と 実際の解とを比較し大きな誤差があった場合プログラムの問題点を考察して下さい。 可能ならばより正確な答えがでる関数を作って下さい。
※これはdoubleやfloatの誤差が問題となる初歩的な問題です。
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
unsigned int array[8] = {12, 6, 8, 3, 10, 1, 0, 9};
0 -> 12 4 -> 10 7 -> 9
# ######## # ## ### # # ## # #### ## # ## ##### # # # # #### # # # # # ## ## ## # ######## #
#+######## #+## ### # #++++## # ####+ ## # ##+##### #++++#+++# #+####+#+# #++++++#+# ## ## ##+# ########+#
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
第 1回 1896年 第 2回 1900年 第 3回 1904年 第 4回 1908年 第 5回 1912年 第 7回 1920年 第 8回 1924年 ・ ・ ・ 第30回 2012年
....... ....... ..Q.... ....... ...Q... ....... .......
√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 . . .
√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
ボウリングのスコアを計算する。
1行目は投げた回数、2行目は倒したピンの数が入力される。
不正な値は入力されないものとする。
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
12 10 10 10 10 10 10 10 10 10 10 10 10
300
19 6 2 0 3 5 5 0 8 10 1 9 3 6 6 4 10 5 5 3
124
21 1 9 1 9 1 9 1 0 1 9 1 9 1 9 0 1 1 9 1 9 4
92
20 1 9 2 8 3 7 4 6 10 0 0 6 4 7 3 8 2 9 1 2
135
別ページに記載