Upload
ryosuke-hagihara
View
701
Download
12
Embed Size (px)
Citation preview
JKTX AOJ 大会 2015解説
担当
くれいみー (@sinh_cosh)
すぱーく (@M1spark20)
らりょす (@raryosu)
JKTX AOJ 大会 2015 運営事務局
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)
ITP1_1_A 問題概要
[ 条件 ]
• 最後の改行を忘れないようにしましょう。• 必要な空白や改行がなかったり、余計な空白や改行を出力する
と 'Presentation Error' となり不正解になってしまいますので、注意してください。
[ 回答例 ]
https://www.dropbox.com/s/b0tj1ii3evsl39v/1_1_a.c?dl=0
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_1_A 問題概要
[ 確認 ]
• 提出方法の確認をしましょう。
• ログインを済ませた状態で右上のファイルマークを押して提出画面に進みましょう。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_1_A 問題概要
[ 確認 ]
• 言語を選択し、ソースコードを張り付けて提出しましょう。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_1_A 問題概要
[ 確認 ]
• 画面が移り、自分の名前や解いた問題、合否等のさまざまな情報が表示されます。• チェックマークなら合格です。確認してみましょう。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
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)
ITP1_1_B 問題概要
[ 条件 ]
・ int 型の変数 x を宣言する ( 名前は任意 )
・ scanf(C 言語 ) や std::cin(C++ 言語 ) などを用いて値を入力する・値の計算は x * x * x で OK
[ 回答例 ]
http://ideone.com/uZrg8w
JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)
ITP1_1_C 問題概要
長方形の面積と周の長さをもとめるプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_C
[ 入力 ]
・辺の長さ a, b
[ 出力 ]
・面積と周の長さ
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
ITP1_1_C 問題概要
[ 条件 ]
長方形の面積 → 縦の長さ*横の長さ = a * b
長方形の周の長さ → ( 縦の長さ + 横の長さ ) * 2 = ( a+b) * 2
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
a cm
b cm[ 回答例 ]
https://gist.github.com/raryosu/1f506d38a3fbaa686f51
最後の改行をわすれないように!
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)
ITP1_1_D 問題概要
[ 条件 ]
• 数値が1桁の場合、数字の 0 を付けて2桁表示をする必要はありません。 ( 例 13:02:59 である必要はありません )
• : (コロン)を時間、分、秒の間に忘れないようにしましょう。
• 最後の改行を忘れないようにしましょう。
JKTX AOJ 大会 2015 運営事務局解説担当者くれいみー (@sinh_cosh)
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)
ITP1_1_D 問題解説
• 除算の商と余りを上手く使いましょう。• 商 … 被除数の中に除数がどれだけあるか• 余り… 被除数を除数で割った時の端数
必ず 余り<除数 が成立する
[ 回答例 ]
https://www.dropbox.com/s/k7oxp2od80iox1j/1_1_d.c?dl=0
JKTX AOJ 大会 2015 運営事務局解説担当者くれいみー (@sinh_cosh)
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)
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
ITP1_2_C 解答例
JKTX AOJ 大会 2015 運営事務局
[ 回答例 ]
http://ideone.com/ilzoy2
解説担当者 すぱーく (@M1spark20)
ITP1_3_C 問題概要
ふたつの値をちいさい順にならびかえて表示するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_C
[ 入力 ]
・ 2 数 a, b
[ 出力 ]
・ 2 数 ( ちいさい順 )
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
ITP1_3_C 問題概要
[ 条件 ]
・ 0 0 が入力されるまで入力を受付つづける・各データセットごとにちいさい順に値を表示する
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
[ 回答例 ]
https://gist.github.com/raryosu/dd195e9856b8724671ca
2 数を比較して、表示する順番をいれかえて表示する
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)
ITP1_4_B 問題概要
[ 条件 ]
• 1つの空白で区切って1行に出力して下さい。
• 出力は浮動小数点数とし、 0.00001 以下の誤差を含んでもよいものとします。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_4_B 問題概要
[ 参考 ]
• 円周は面積はで算出できます。• 円周率は正確な値に近づけましょう。• math.h を利用するのも一つの手です。
[ 回答例 ]
https://www.dropbox.com/s/rs1mg56vh50yh86/1_4_b.c?dl=0
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
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)
ITP1_5_A 問題概要
[ 方針 ]
・入力が複数のデータセットである事に注意・ 2 重 for 文の出番 !!
長さ W の # を描画 → 改行 →また長さ W の # を描画これを H 回繰り返せば OK
・ 1 セット出力終了後にもう一度改行を行う事を忘れないこと !!
[ 回答例 ]
http://ideone.com/1R5euL
JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)
########################################
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)
ITP1_6_A 問題概要
[ 条件 ]
・数列の長さ≦ 100
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
[ 回答例 ]
https://gist.github.com/raryosu/9aff910ac9131ac8eb90
・配列の添字は 0 からはじまることに注意・ i 番目の要素を表示するための添字は [i-1] を指定・表示のときには配列の後ろから順番にさかのぼって表示
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)
ITP1_6_B 問題概要
[ 条件 ]
• 入力枚数 n は 52 以下です。
• 入力及び出力に用いられる、マークは S, H, C, D の 4種類です。この順、かつ数字の小さい順での出力が必須です。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_6_B 問題概要
[ 参考 ]
•カードは 2次元配列を用いて管理すると管理しやすいです。• カードのマークごとに適当な数字を割り振りましょう。
• 2次元配列が難しい場合は card[52] で宣言して、マークごとに使う範囲を決めるなどの工夫もできます。• 使えるに越したことはないのでこの機会に触ってみましょう。
[ 回答例 ]
https://www.dropbox.com/s/iroc24l47y93p71/1_6_b.c?dl=0
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
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)
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)
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 が該当す
ることを利用しています。
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)
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)
ITP1_7_B 解答例
JKTX AOJ 大会 2015 運営事務局
[ 回答例 ]
http://ideone.com/X5CIC8
解説担当者 すぱーく (@M1spark20)
ITP1_8_B 問題概要
与えられた数の各桁の和を計算するプログラムhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B
[ 入力 ]
・整数 x が与えられます。
[ 出力 ]
・各桁の和を出力してください。・ 0 が入力された時は出力せず終了してください。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_8_B 問題概要
[ 条件 ]
• 整数 x は 1000 桁以下です。
• 0 が入力されるまでは数字を受け付け続けてください。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_8_B 問題解説
[ 参考 ]
• 1000 桁の整数に対応した型を用意します。• long long int は、よっておよそ 20 桁までしか対応できません。• 1000 文字の文字列として考えましょう。
• 文字コード上でも 0~ 9 はひと並びです。• n-'0' で 0 の文字コードからの相対差 ( 実質的な整数値 ) が求められま
す。
[ 回答例 ]
https://gist.github.com/raryosu/38698ec3b391df49874aJKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
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)
ITP1_10_A 問題概要
[ 条件 ]
・みんな大好き 3平方の定理を使う
・平方根の算出は sqrt関数を使って行う。C では math.h のインクルードが必要 !!
引数 , 戻り値は以下の通り。double sqrt(double x); // x の平方根が返る
JKTX AOJ 大会 2015 運営事務局解説担当者 すぱーく (@M1spark20)
ITP1_10_A 解答例
JKTX AOJ 大会 2015 運営事務局
[ 回答例 ]
http://ideone.com/Eb0FkW
解説担当者 すぱーく (@M1spark20)
ITP1_8_C 問題概要
文章中にそれぞれのアルファベットが何文字あるか数えるhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C
[ 入力 ]
・空白を含む文章[ 出力 ]
a: a の個数という形式で全アルファベットの個数を表示(大文字小文字の区別はない)
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
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)
ITP1_8_C 解答例
JKTX AOJ 大会 2015 運営事務局解説担当者 らりょす (@raryosu)
[ 回答例 ]
https://gist.github.com/raryosu/9196f3e0ba63afbd534a
while((ch=getchar()) != EOF)
• この部分でファイルの末尾まで文字を読みこんでいます
ch-'a'
• char 型同士や数値と char 型のデータの演算をおこなっていますが、 char 型のデータも所詮は数値データであるため可能です。
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)
ITP1_9_A 問題概要
[ 条件 ]
• W の文字列の長さは 10 を超えません。
• T の1行あたりの文字列の長さは 1000 を超えません。
• W や T の大文字小文字は区別されません。同種のものとして扱ってください。
• 終了条件の "END_OF_TEXT" は大文字小文字の区別をしてください。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_9_A 問題概要
[ 参考 ]
• string.h や、 ctype.h などを使ってみましょう。• 文字列の扱いが楽になります。
• toupper関数は小文字が入力されたら大文字に、大文字はそのまま大文字を返す関数です。• strcmp関数は 2種類の文字列が等しい時には 0 を返します。
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)
ITP1_9_A 問題概要
[ 参考 ]
• scanf関数は読み込みの時点で、スペースごとに文字を分けて読み込めます。• 長文は、実質的には単語の羅列と解釈しましょう。
[ 回答例 ]
https://gist.github.com/raryosu/0e94a754b3bfd82c8434
JKTX AOJ 大会 2015 運営事務局解説担当者 くれいみー (@sinh_cosh)