lecture2
DESCRIPTION
中1用 NPCA Lecture 2TRANSCRIPT
競プロ講義
第2回
● みなさんAOJ Volume 100の最初の20問やって来ましたか???
● まだの人はお家でやっといてね
● 今から皆さんがつまづきそうな所の解説をします
● AOJ 10004 Sorting Three Numbers
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10004
● 3つの数値が与えられるので小さい順に出力
● 3つの数の大小関係は高々6通りだしすべての場合に分けたら良さそう
int a,b,c;
scanf(“%d %d %d”,&a,&b,&c);
if(a<=b&&b<=c){…}
else if(a<=c&&c<=b){…}
else if(b<=a&&a<=c){…}
else if(b<=c&&c<=a){…}
else if(c<=a&&a<=b){…}
else {…}
冗長
● aとbを比較してbのほうが小さかったら交換● bとcを比較してcのほうが小さかったら交換
- この時点でcが最大であることが確定● aとbを比較してbのほうが小さかったら交換
- この時点でbが2番目に大きいことが確定
- よって自動的にaが3番目に大きいことが確定
a b c
3 8 1
a b c
3 < 8 1
a b c
3 8 1
a b c
3 8 > 1
a b c
3 1 8
a b c
3 1 8
a b c
3 > 1 8
a b c
1 3 8
a b c
1 3 8
● この考え方はバブルソートというアルゴリズムに
つながります
● ここで一つ実装上の注意
aとbの値を入れ替えたい
● aとbの値を入れ替える時、
a=b;
b=a;
● としてはいけない。その理由は?
たとえば
● a=2,b=1のとき
a=b; // aにbの値が代入される。a=1,b=1
b=a; // bにaの値が代入される。a=1,b=1
● おかしい
どうすればいいか
● 一旦値を保存しておく変数を用意すればいい。
int a,b,tmp;
tmp=a;
a=b;
b=tmp;
どうすればいいか
● a=2,b=1のとき
tmp=a; // tmp=2 , a=2 , b=1
a=b; // tmp=2 , a=1 , b=1
b=tmp; // tmp=2 , a=1 , b=2
● ちゃんとできてる● 10007: Swapping Two Numbers でも同じように注意
ASCIIコードと再帰のお話
● http://e-words.jp/p/r-ascii.html
● http://www.c-tipsref.com/tips/math/o_factorial.html
ASCIIコードと再帰のお話
● http://e-words.jp/p/r-ascii.html
● http://www.isc.meiji.ac.jp/~daishin/suukei1/12.html
Coding Phase (90分)
AOJ Volume 100 10020~10029
ヒント
● 三平方の定理
● S=(1/2)a*b*sinC
● Σ(k=1,N)k = 1+2+…+N-1+N