まとめ

Last-modified: 2015-05-31 (日) 20:10:42

まとめとして課題を用意してあります。
難易度別にしてあるので、自分にあった難易度のものを解いてください。

 

難易度 ☆☆☆☆

入出力と四則演算のみで解ける問題です。
if や for は使用しません。

課題0: 足し算

入力された2つの数を足すプログラムを作りなさい。

 

入力形式

整数 a, b を2つ空白区切りで入力します。

 

出力形式

整数を1つ出力します。

 

実行例

5 3
8

課題1: 切り捨て

入力した整数の100の位以下を切り捨てするプログラムを作りなさい。

 

入力形式

整数を1つ入力します。

 

出力形式

整数を1つ出力します。

 

実行例1

5489
5000
 

実行例2

98879
98000
 

実行例3

999
0

課題2: 切り上げ

入力した整数の100の位以下を切り上げするプログラムを作りなさい。

 

入力形式

整数を1つ入力します。

 

出力形式

整数を1つ出力します。

 

実行例1

98879
99000
 

実行例2

87000
87000
 

実行例3

1
1000

課題3: 四捨五入

入力した整数を100の位で四捨五入するプログラムを作りなさい。

 

入力形式

整数を1つ入力します。

 

出力形式

整数を1つ出力します。

 

実行例1

98579
99000
 

実行例2

67483
67000
 

実行例3

499
0

課題4: 秒と分

入力として、秒数が与えられます。
分:秒」の表記にして出力しなさい。

 

入力形式

整数を1つ入力します。

 

出力形式

分:秒」の形式で出力します。

 

実行例1

90
1:30
 

実行例2

195
3:15
 

実行例3

45
0:45

課題5: 1次方程式

1次方程式 ax + b = 0 を解くプログラムを作成しなさい。

 

入力形式

整数 a b を空白区切りで入力します。
ただし、a ≠ 0 とします。

 

出力形式

解 x を実数で1つ出力します。
小数点以下第2桁まで出力しなさい。

 

実行例1

4 -12
3.00
 

実行例2

3 6
-2.00
 

実行例3

2 -5
2.50

難易度 ★☆☆☆

条件分岐を用いる問題。

課題10: 絶対値

入力された実数の絶対値を表示しなさい。

 

入力形式

実数が1つ入力されます。

 

出力形式

実数を1つ出力します。
小数点以下第2桁まで出力しなさい。

 

実行例1

-42.3
42.30
 

実行例2

3.14
3.14
 

実行例3

0
0.00

課題11: お釣り

お釣りの金額が入力されます。
最小の札・硬貨の枚数を求めなさい。

なお、以下の札・硬貨が使用できるとし、それぞれ十分な個数があると仮定する。

  • 1万円札
  • 5千円札
  • 千円札
  • 500円玉
  • 100円玉
  • 50円玉
  • 10円玉
  • 5円玉
  • 1円玉
 

入力形式

お釣りの金額が整数 (> 0) で1つ入力されます。

 

出力形式

お釣りに使う札・硬貨の金額と枚数を、金額が大きい順に出力しなさい。

 

実行例1

762
500 1
100 2
50 1
10 1
1 2
 

実行例2

87298
10000 8
5000 1
1000 2
100 2
50 1
10 4
5 1
1 3
 

実行例3

1000000
10000 100

課題12: 日数

西暦 y 年 m 月の日数を表示するプログラムを作成しなさい。

 

入力形式

整数 y (≧ 0), m (1 ≦ m ≦ 12) が空白区切りで与えられます。

 

出力形式

整数を1つ出力します。

 

実行例1

2011 8
31
 

実行例2

2011 2
28
 

実行例3

2004 2
29
 

実行例4

1900 2
28

課題13:カレンダー

課題12を利用してカレンダーを表示するプログラムを書きなさい
日付と曜日の基準は自分の好きなところでよい

難易度 ★★☆☆

繰り返しを用いる問題。

課題20: 倍数

m 以下の a の倍数の和を求めなさい。

 

入力形式

a (> 0), m (> 0) が空白切りで入力されます。

a m
 

出力形式

整数を1つ出力します。

 

実行例1

2 4
6
 

実行例2

4 30
112
 

実行例3

5 3
0

課題21: 最小値と最大値

整数 xi が n 個入力されます。
最小値と最大値を出力しなさい。

 

入力形式

1行目に整数の個数 n (> 0 ) が入力されます。
2行目に n 個の整数 xi が空白区切りで入力されます。

n
x1 x2 ... xn
 

出力形式

最小値 min と最大値 max を空白区切りで出力します。

min max
 

実行例1

5
3 5 -4 8 -7
-7 8
 

実行例2

1
-8
-8 -8

課題22: 素数判定

入力した数が素数であるか判定するプログラムを作成しなさい。

 

入力形式

素数かどうか判定する整数 x (> 0) を入力します。

 

出力形式

x が素数であれば「prime number」、そうでない場合は「not prime number」と出力しなさい。

 

実行例1

1
not prime number
 

実行例2

2
prime number
 

実行例3

79
prime number
 

実行例4

99
not prime number

課題23: フィボナッチ数

以下のように、ある数が1つ前の数と2つ前の数の和になっている数を、フィボナッチ数といいます。

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...

1番目, 2番目のフィボナッチ数を 1 としたとき、n 番目のフィボナッチ数を求めなさい。

 

入力形式

整数 n (1 ≦ n ≦ 40) を1つ入力します。

 

出力形式

整数を1つ出力します。

 

実行例1

1
1
 

実行例2

2
1
 

実行例3

7
13
 

実行例4

40
102334155

課題24: 最大公約数

整数 a, b の最大公約数を求めなさい。

 

入力形式

整数 a, b (> 0) が空白区切りで入力されます。

 

出力形式

整数を1つ出力します。

 

実行例1

6 15
3
 

実行例2

21 14
7
 

実行例3

23 51
1

課題25: 2進数

入力された整数 n を2進数で表示しなさい。

 

入力形式

整数 n (0 ≦ n < 65536) を1つ入力します。

 

出力形式

整数 n を2進数で出力します。
16 bit で表記してください。

 

実行例1

5
0000000000000101
 

実行例2

65535
1111111111111111
 

実行例3

0
0000000000000000

難易度 ★★★☆

配列や文字列を扱う問題。

課題30: 配列

整数 xi が n 個入力されます。
1 以上 10 未満の範囲で、入力されていない数を出力しなさい。

 

入力形式

1行目に整数 xi (1 ≦ xi < 10) の個数 n (≧ 0) が与えられます。
2行目に n 個の整数 xi が空白区切りで与えられます。

n
x1 x2 ... xn
 

出力形式

指定の範囲で入力されていない数を、改行で区切って昇順で出力しなさい。

 

実行例1

7
1 4 2 9 6 9 3
5
7
8
 

実行例2

0
1
2
3
4
5
6
7
8
9

課題31: アルファベット

アルファベットのみで構成される文字列が、1つ入力されます。
文字列に含まれるアルファベットの中で、アルファベット順で一番小さい文字を出力しなさい。
ただし、入力される文字列の、大文字と小文字は区別しないものとする。

 

入力形式

アルファベットのみで構成される文字列が1つ入力されます。
最大文字数は 10 文字と仮定してください。

 

出力形式

アルファベット順で一番小さい文字を、小文字で出力しなさい。

 

実行例1

kochi
c
 

実行例2

NHK
h
 

実行例3

SoftBank
a
 

実行例4

zyxwvutsrq
q

課題32: 辞書順

3つの文字列が入力されます。
入力された3つの文字列をすべてを使い、辞書順で最も小さい文字列を作成しなさい。

 

入力形式

3つの文字列が改行区切りで与えられます。
文字列は、アルファベットの小文字のみで構成されています。
1つの文字列は最大でも 3 文字です。

 

出力形式

文字列を1つ出力します。

 

実行例1

ap
e
pl
apepl
 

実行例2

de
c
ab
abcde
 

実行例3

gja
gex
xxs
gexgjaxxs

課題33: 連想配列

このプログラムでは、文字列をキーにして整数を記憶することができます。
整数を保存したり読みだしたりするには、プログラムに標準入力からコマンドを与えます。

コマンドには、次の2種類の形式があります。

  1. 保存
    store キー 保存する整数
  2. 読み出し
    fetch キー

キーは半角英数字で構成され、最大でも 10 文字です。

保存されていないデータを読み出すことはできません。
また、そのような入力は存在しないと仮定してください。

同じキーに保存を試みた場合、現在保存されている整数は消去され、
新しい整数のみが保存されます。

コマンドは最大 n (2 ≦ n ≦ 10) 個であるため、高速な実装をする必要はありません。

 

入力形式

1 行目に、コマンドの個数 n が与えられます。
2 行目~ (n+1) 行目に n 個のコマンド ci が与えられます。
コマンドの形式は、問題文を参照してください。

n
c1 ...
c2 ...
...
cn ...
 

出力形式

fetch コマンドが実行された際に、キーに対応する整数を1行で表示してください。

 

実行例1

4
store tosa 86
store yamada 64
fetch yamada
64
fetch tosa
86
 

実行例2

8
store foo 2
store bar 4
fetch bar
4
fetch foo
2
store baz 6
fetch baz
6
store foo 8
fetch foo
8

難易度 ★★★★

発展的な問題や、実装が面倒な問題。

課題40: 素数

n 番目の素数 x を表示しなさい。

 

入力形式

整数 n を1つ入力します。

 

出力形式

n 番目 (2を1番目とする) の素数 x を出力します。
この x は 10,000,000 未満であることが保証されます。

 

実行例1

1
2
 

実行例2

427
2963
 

実行例3

13452
145399
 

実行例4

664579
9999991

課題41: ソート

入力された数値を昇順で並び替えなさい。

 

入力形式

1行目に整数の個数 n (0 < n ≦ 10) が入力されます。
2行目に n 個の整数 xi がスペース区切りで入力されます。

n
x1 x2 ... xn
 

出力形式

入力された n 個の整数 xi をスペース区切りで昇順で表示します。

x1 x2 ... xn
 

実行例1

4
6 2 4 9
2 4 6 9
 

実行例2

10
1 5 9 7 4 2 0 8 3 6
0 1 2 3 4 5 6 7 8 9
 

実行例3

1
0
0

課題42: ハノイの塔

以下のルールに従ってすべての円盤を右端の杭に移動させられれば完成である。

3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。
最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。
円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。

入力形式

何段のハノイであるかnを入力する

出力形式

ハノイの塔を完成するまでの手数を出力する

実行例1

3
7

実行例2

24
16777215

課題43: 巡回セールスマン

あなたは有名警備会社に勤めるセールスマンです。
今日も多くの家を回り、多くの契約を取ろうと意気込んでいます。

この世界には、"魔女" と呼ばれる悪が存在します。
魔女はこの世界を闇から蝕んでいます。
近頃、頻発している行方不明や異常死などはこの "魔女" が引き起こしていると言われています。

しかし、このことはマスコミも報道せず、国の機密情報とされています。
国民の混乱を避けるためと言われていますが、定かではありません。
あなたはこの魔女を退治する仕事を、国から極秘に依頼されています。

あなたの契約の対象は少女です。
あなたは少女の願いを叶える代わりに、魔法少女になって魔女を退治してもらいます。
魔法少女となった幼い少女は、莫大な魔力を有し、魔女を一瞬にして片付けるといわれています。

あなたは、この腐った世界を救うため、少しでも早く、多くの契約を取り付けなくてはいけません。
効率的に契約を取り付けるため、あなたはプログラムを組み、どのように回ればもっとも効率的か計算することにしました。

あなたは、会社から魔法少女の候補のリストを渡されています。
少しでも多く契約を取り付けるために、あなたはすべての箇所を回る予定です。

世界を救うため、どのように回れば効率的に契約が取り付けられるか、プログラムを作成して求めてください。

 

入力形式

1 行目に、魔法少女の候補の家の数 n (0 < n ≦ 20) と、魔法少女の候補の家の間の移動時間の個数 m (0 ≦ m ≦ 190) が与えられます。
2 行目 ~ (m + 1) 行目に、魔法少女の家の間の移動時間が与えられます。

移動時間は整数3つで表され、a の家からb の家までt (0 < t < 100) 分かかることを示しています。
a, b は家を表す整数で、0 以上 n 未満です。

逆に移動した場合も、同様の時間がかかります。
a からb まで複数の移動時間が指定されることはありません。

n m
a1 b1 t1
a2 b2 t2
...
am bm tm
 

出力形式

もっとも効率的にすべての家を回った際の、最短時間を整数で表示してください。
この際、開始地点と終了地点はどの家でも構いません。

 

実行例1

5 7
4 0 2
4 2 2
0 2 1
0 1 3
1 3 2
0 3 2
3 2 1
6
 

実行例3

10 46
0 1 52
0 2 31
0 3 42
0 4 72
0 5 83
0 6 33
0 7 45
0 8 49
0 9 32
1 1 51
1 2 33
1 3 9
1 4 33
1 5 85
1 6 33
1 7 35
1 8 42
1 9 34
2 3 31
2 4 92
2 5 74
2 6 33
2 7 30
2 8 31
2 9 10
3 4 4
3 5 12
3 6 23
3 7 82
3 8 92
3 9 63
4 5 24
4 6 81
4 7 12
4 8 38
4 9 42
5 6 98
5 7 90
5 8 3
5 9 24
6 7 32
6 8 31
6 9 74
7 8 42
7 9 90
8 9 23
156

課題44: nクイーン問題

 

実行例2

n x nの盤上にn個のクイーンを配置するこの時互いのクイーンが進路を遮らないように配置するパターンは何通り存在するか求めよ

クイーンの動きは将棋の飛車と角行をあわせた動きである

入力形式

n行

出力形式

nパターン

実行例

5
10