jktx aoj 2015 解説ii

48
JKTX AOJ 大大 2015 大大 大大 くくくくく (@sinh_cosh) くくくく (@M1spark20) くくくく (@raryosu) JKTX AOJ くく 2015 くくくくく

Upload: ryosuke-hagihara

Post on 09-Aug-2015

699 views

Category:

Technology


12 download

TRANSCRIPT

Page 1: JKTX AOJ 2015 解説II

JKTX AOJ 大会 2015解説

担当

くれいみー (@sinh_cosh)

すぱーく (@M1spark20)

らりょす (@raryosu)

JKTX AOJ 大会 2015 運営事務局

Page 2: JKTX AOJ 2015 解説II

ITP1_1_A 問題概要

Hello World を表示するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_A

[ 入力 ]

・入力が無いことを表す「 No input 」

[ 出力 ]

・ Hello World

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 3: JKTX AOJ 2015 解説II

ITP1_1_A 問題概要

[ 条件 ]

• 最後の改行を忘れないようにしましょう。• 必要な空白や改行がなかったり、余計な空白や改行を出力する

と 'Presentation Error' となり不正解になってしまいますので、注意してください。

[ 回答例 ]

https://www.dropbox.com/s/b0tj1ii3evsl39v/1_1_a.c?dl=0

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 4: JKTX AOJ 2015 解説II

ITP1_1_A 問題概要

[ 確認 ]

• 提出方法の確認をしましょう。

• ログインを済ませた状態で右上のファイルマークを押して提出画面に進みましょう。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 5: JKTX AOJ 2015 解説II

ITP1_1_A 問題概要

[ 確認 ]

• 言語を選択し、ソースコードを張り付けて提出しましょう。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 6: JKTX AOJ 2015 解説II

ITP1_1_A 問題概要

[ 確認 ]

• 画面が移り、自分の名前や解いた問題、合否等のさまざまな情報が表示されます。• チェックマークなら合格です。確認してみましょう。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 7: JKTX AOJ 2015 解説II

ITP1_1_B 問題概要

3 乗の計算を行うプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_B

[ 入力 ]

・ 1 つの整数 : x

[ 出力 ]

・入力 x の 3 乗を 1 行に出力※ 最後の改行を忘れないこと !!

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 8: JKTX AOJ 2015 解説II

ITP1_1_B 問題概要

[ 条件 ]

・ int 型の変数 x を宣言する ( 名前は任意 )

・ scanf(C 言語 ) や std::cin(C++ 言語 ) などを用いて値を入力する・値の計算は x * x * x で OK

[ 回答例 ]

http://ideone.com/uZrg8w

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 9: JKTX AOJ 2015 解説II

ITP1_1_C 問題概要

長方形の面積と周の長さをもとめるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_C

[ 入力 ]

・辺の長さ a, b

[ 出力 ]

・面積と周の長さ

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 10: JKTX AOJ 2015 解説II

ITP1_1_C 問題概要

[ 条件 ]

長方形の面積 → 縦の長さ*横の長さ = a * b

長方形の周の長さ → ( 縦の長さ + 横の長さ ) * 2 = ( a+b) * 2

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

a cm

b cm[ 回答例 ]

https://gist.github.com/raryosu/1f506d38a3fbaa686f51

最後の改行をわすれないように!

Page 11: JKTX AOJ 2015 解説II

ITP1_1_D 問題概要

時間の単位変換をするプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_D

[ 入力 ]

• S  が1行に与えられます。• 例  46979

[ 出力 ]

• h( 時間 ) 、 m( 分 ) 、 s( 秒 )  を : (コロン)区切りで1行に出力してください。• 例  13:2:59

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 12: JKTX AOJ 2015 解説II

ITP1_1_D 問題概要

[ 条件 ]

• 数値が1桁の場合、数字の 0 を付けて2桁表示をする必要はありません。 ( 例  13:02:59 である必要はありません )

• : (コロン)を時間、分、秒の間に忘れないようにしましょう。

• 最後の改行を忘れないようにしましょう。

JKTX AOJ 大会 2015 運営事務局解説担当者くれいみー (@sinh_cosh)

Page 13: JKTX AOJ 2015 解説II

ITP1_1_D 問題解説

簡単な入力例を用意して大きな位から考えましょう。

• 入力例 1 3600 (60 秒* 60 分= 1:0:0)

• 入力例 2 3660 (60 秒* 61 分= 1:1:0)

• 入力例 3 3661 (60 秒* 61 分+ 1 秒= 1:1:1)

JKTX AOJ 大会 2015 運営事務局解説担当者くれいみー (@sinh_cosh)

Page 14: JKTX AOJ 2015 解説II

ITP1_1_D 問題解説

• 除算の商と余りを上手く使いましょう。• 商 …  被除数の中に除数がどれだけあるか• 余り…  被除数を除数で割った時の端数

必ず 余り<除数 が成立する

[ 回答例 ]

https://www.dropbox.com/s/k7oxp2od80iox1j/1_1_d.c?dl=0

JKTX AOJ 大会 2015 運営事務局解説担当者くれいみー (@sinh_cosh)

Page 15: JKTX AOJ 2015 解説II

ITP1_2_C 問題概要

3 つの数を小さい順に並べかえるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_2_C

[ 入力 ]

・ 3 つの数字が空白区切りで与えられる 例 :11 45 14

[ 出力 ]

・小さい順に並び替えた 3 つの整数を 1 行に出力 例 :11 14 45

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 16: JKTX AOJ 2015 解説II

ITP1_2_C 問題概要

[ 方針 ]

・このフローチャートを満たすものを作れば OK

3 つの数字をそれぞれ左から a, b, c とする

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

a < b?

b < c? a < c?

b < c?

YES

NO

a < c?

a < b < c a < c < b c < a < b b < a < c b < c < a c < b < a

YES

NO

YES

NO

YES

NO

YES

NO

Page 17: JKTX AOJ 2015 解説II

ITP1_2_C 解答例

JKTX AOJ 大会 2015 運営事務局

[ 回答例 ]

http://ideone.com/ilzoy2

解説担当者 すぱーく (@M1spark20)

Page 18: JKTX AOJ 2015 解説II

ITP1_3_C 問題概要

ふたつの値をちいさい順にならびかえて表示するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_C

[ 入力 ]

・ 2 数 a, b

[ 出力 ]

・ 2 数 ( ちいさい順 )

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 19: JKTX AOJ 2015 解説II

ITP1_3_C 問題概要

[ 条件 ]

・ 0 0 が入力されるまで入力を受付つづける・各データセットごとにちいさい順に値を表示する

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

[ 回答例 ]

https://gist.github.com/raryosu/dd195e9856b8724671ca

2 数を比較して、表示する順番をいれかえて表示する

Page 20: JKTX AOJ 2015 解説II

ITP1_4_B 問題概要

面積と円周を求めるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_B

[ 入力 ]

・1つの実数で表された半径 r  が与えられます。

[ 出力 ]

・面積と円周の長さを1つの空白で区切って1行に出力して下さい。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 21: JKTX AOJ 2015 解説II

ITP1_4_B 問題概要

[ 条件 ]

• 1つの空白で区切って1行に出力して下さい。

• 出力は浮動小数点数とし、 0.00001 以下の誤差を含んでもよいものとします。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 22: JKTX AOJ 2015 解説II

ITP1_4_B 問題概要

[ 参考 ]

• 円周は面積はで算出できます。• 円周率は正確な値に近づけましょう。• math.h を利用するのも一つの手です。

[ 回答例 ]

https://www.dropbox.com/s/rs1mg56vh50yh86/1_4_b.c?dl=0

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 23: JKTX AOJ 2015 解説II

ITP1_5_A 問題概要長方形を描くプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_5_A

[ 入力 ]

・ 1 行に高さ :H, 幅 :W の空白区切り※ 複数のデータセットが与えられる  H = W = 0 の時、入力は終了。

[ 出力 ]

・幅 W 個 , 高さ H 個の # で作った長方形

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 24: JKTX AOJ 2015 解説II

ITP1_5_A 問題概要

[ 方針 ]

・入力が複数のデータセットである事に注意・ 2 重 for 文の出番 !!

長さ W の # を描画 → 改行 →また長さ W の # を描画これを H 回繰り返せば OK

・ 1 セット出力終了後にもう一度改行を行う事を忘れないこと !!

[ 回答例 ]

http://ideone.com/1R5euL

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

########################################

Page 25: JKTX AOJ 2015 解説II

ITP1_6_A 問題概要

入力された数列を逆順にして表示するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_6_A

[ 入力 ]

・ 1 行目 数列の値・ 2 行目 i 番目の値 (a1 a2 … ai)

[ 出力 ]

・入力の逆順になった数列 (ai … a2 a1)

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 26: JKTX AOJ 2015 解説II

ITP1_6_A 問題概要

[ 条件 ]

・数列の長さ≦ 100

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

[ 回答例 ]

https://gist.github.com/raryosu/9aff910ac9131ac8eb90

・配列の添字は 0 からはじまることに注意・ i 番目の要素を表示するための添字は [i-1] を指定・表示のときには配列の後ろから順番にさかのぼって表示

Page 27: JKTX AOJ 2015 解説II

ITP1_6_B 問題概要

不足したカードを見つけるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_6_B

[ 入力 ]

・ 1 行目に入力回数として n が与えられます。・ 2 行目以降に、マーク 数字の順に n 回入力されます。

[ 出力 ]

・入力されなかったカードのマークと数字をすべて出力してください。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 28: JKTX AOJ 2015 解説II

ITP1_6_B 問題概要

[ 条件 ]

• 入力枚数 n は 52 以下です。

• 入力及び出力に用いられる、マークは S, H, C, D の 4種類です。この順、かつ数字の小さい順での出力が必須です。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 29: JKTX AOJ 2015 解説II

ITP1_6_B 問題概要

[ 参考 ]

•カードは 2次元配列を用いて管理すると管理しやすいです。• カードのマークごとに適当な数字を割り振りましょう。

• 2次元配列が難しい場合は card[52] で宣言して、マークごとに使う範囲を決めるなどの工夫もできます。• 使えるに越したことはないのでこの機会に触ってみましょう。

[ 回答例 ]

https://www.dropbox.com/s/iroc24l47y93p71/1_6_b.c?dl=0

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 30: JKTX AOJ 2015 解説II

ITP1_7_A 問題概要

試験の成績をつけるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_A

[ 入力 ]

・各データセット m, f, r

[ 出力 ]

・成績 A, B, C, D, F のいずれか

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 31: JKTX AOJ 2015 解説II

ITP1_7_A 問題概要

[ 条件 ]

JKTX AOJ 大会 2015 運営事務局

条件 成績m か f が -1 F

m+f ≧ 80 A

65≧ m+f > 80 B

50≧ m+f > 65 C

30≧ m+f > 50 かつ r≧50 C

30≧ m+f > 50 かつ r<50 D

m+ f ≦ 30 F

解説担当者 らりょす (@raryosu)

Page 32: JKTX AOJ 2015 解説II

ITP1_7_A 解答例

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

[ 回答例 ]

https://gist.github.com/raryosu/fcb02a4e692dac819e08

• 条件分岐で、場合わけをおこないます。if(m+f >= 80){ /* 成績が A の時 */

printf("A\n");

} else if(m+f >= 65){ /* 成績が B の時 */

printf("B\n");

}• このようにすると、ふたつめの if 文には 80 < m+f≤65 が該当す

ることを利用しています。

Page 33: JKTX AOJ 2015 解説II

ITP1_7_B 問題概要

組み合わせの数を出力するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_B

[ 入力 ]

・最大数 :n, 合計値 :x の空白区切り※ 複数のデータセットが与えられる  n = x = 0 の時、入力は終了。

[ 出力 ]

・ 1~ n で重複のない 3 つの数字の和が x となる組み合わせ数JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 34: JKTX AOJ 2015 解説II

ITP1_7_B 問題概要

[ 方針 ]

・総当たりの組み合わせで調べればよいそのために… 3 重 for 文を使う !!

・ループのまわし方は以下の通りで OK

1 重目 ) i: 1~ n

2 重目 ) j: i+1~ n

3 重目 )k: j+1~ n

i + j + k == x??

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 35: JKTX AOJ 2015 解説II

ITP1_7_B 解答例

JKTX AOJ 大会 2015 運営事務局

[ 回答例 ]

http://ideone.com/X5CIC8

解説担当者 すぱーく (@M1spark20)

Page 36: JKTX AOJ 2015 解説II

ITP1_8_B 問題概要

与えられた数の各桁の和を計算するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B

[ 入力 ]

・整数 x が与えられます。

[ 出力 ]

・各桁の和を出力してください。・ 0 が入力された時は出力せず終了してください。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 37: JKTX AOJ 2015 解説II

ITP1_8_B 問題概要

[ 条件 ]

• 整数 x は 1000 桁以下です。

• 0 が入力されるまでは数字を受け付け続けてください。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 38: JKTX AOJ 2015 解説II

ITP1_8_B 問題解説

[ 参考 ]

• 1000 桁の整数に対応した型を用意します。• long long int は、よっておよそ 20 桁までしか対応できません。• 1000 文字の文字列として考えましょう。

• 文字コード上でも 0~ 9 はひと並びです。• n-'0' で 0 の文字コードからの相対差 ( 実質的な整数値 ) が求められま

す。

[ 回答例 ]

https://gist.github.com/raryosu/38698ec3b391df49874aJKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 39: JKTX AOJ 2015 解説II

ITP1_10_A 問題概要

2 点の距離を求めるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_10_A

[ 入力 ]

・ 2 点の座標 P1(x1,y1), P2(x2,y2) のそれぞれの値空白区切りで、 x1 y1 x2 y2 の順

[ 出力 ]

・ 2 点 P1, P2 間の距離JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 40: JKTX AOJ 2015 解説II

ITP1_10_A 問題概要

[ 条件 ]

・みんな大好き 3平方の定理を使う

・平方根の算出は sqrt関数を使って行う。C では math.h のインクルードが必要 !!

引数 , 戻り値は以下の通り。double sqrt(double x);   // x の平方根が返る

JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)

Page 41: JKTX AOJ 2015 解説II

ITP1_10_A 解答例

JKTX AOJ 大会 2015 運営事務局

[ 回答例 ]

http://ideone.com/Eb0FkW

解説担当者 すぱーく (@M1spark20)

Page 42: JKTX AOJ 2015 解説II

ITP1_8_C 問題概要

文章中にそれぞれのアルファベットが何文字あるか数えるhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C

[ 入力 ]

・空白を含む文章[ 出力 ]

a: a の個数という形式で全アルファベットの個数を表示(大文字小文字の区別はない)

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 43: JKTX AOJ 2015 解説II

ITP1_8_C 問題概要

[ 方針 ]

・ 1 文字ずつ文字列を判別 (getchar か scanf で取得 )

・アルファベットの配列をつくり、各文字の個数を数える・配列の添字は、その文字から 'a' または 'A' を引いた値になる(文字コードで文字が表現されているから、 'a'('A') の値を引くと、 0-25 の値になる) ->http://homepage3.nifty.com/mmgames/c_guide/14-01.html 参照

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

Page 44: JKTX AOJ 2015 解説II

ITP1_8_C 解答例

JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)

[ 回答例 ]

https://gist.github.com/raryosu/9196f3e0ba63afbd534a

while((ch=getchar()) != EOF)

• この部分でファイルの末尾まで文字を読みこんでいます

ch-'a'

• char 型同士や数値と char 型のデータの演算をおこなっていますが、 char 型のデータも所詮は数値データであるため可能です。

Page 45: JKTX AOJ 2015 解説II

ITP1_9_A 問題概要

T の中にある W の数を出力するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A

[ 入力 ]

・1つの単語 W  と文章 T  が与えられます。

[ 出力 ]

・ T  の中にある W  の数を出力してください。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 46: JKTX AOJ 2015 解説II

ITP1_9_A 問題概要

[ 条件 ]

• W の文字列の長さは 10 を超えません。

• T の1行あたりの文字列の長さは 1000 を超えません。

• W や T の大文字小文字は区別されません。同種のものとして扱ってください。

• 終了条件の "END_OF_TEXT" は大文字小文字の区別をしてください。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 47: JKTX AOJ 2015 解説II

ITP1_9_A 問題概要

[ 参考 ]

• string.h や、 ctype.h などを使ってみましょう。• 文字列の扱いが楽になります。

• toupper関数は小文字が入力されたら大文字に、大文字はそのまま大文字を返す関数です。• strcmp関数は 2種類の文字列が等しい時には 0 を返します。

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)

Page 48: JKTX AOJ 2015 解説II

ITP1_9_A 問題概要

[ 参考 ]

• scanf関数は読み込みの時点で、スペースごとに文字を分けて読み込めます。• 長文は、実質的には単語の羅列と解釈しましょう。

[ 回答例 ]

https://gist.github.com/raryosu/0e94a754b3bfd82c8434

JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)