きょうのまなび(AOJ)20210505
今日もAOJの問題を解きました
ITP1_9_C:文字列の比較
ITP1_9_D:文字列変換
ITP1_10_ A:距離
ITP1_10_B:三角関数
ITP1_10_C:標準偏差
ITP_1_10_D:ミンコフスキー距離
以下それぞれの雑記
ITP1_9_C:文字列の比較
C++の文字列って<=>の記号で辞書比較できるんだって初めて知った
ITP1_9_D:文字列変換
replace関数のことをすっかり忘れて、for文で地道に解いてた
string使ったけど、reverseとかreplace使うのには配列の方が扱いやすかったかもしれない
ITP1_10_ A:距離
出力時の桁数指定のために使うfixedとsetprecision()をそろそろ諳んじたい
「桁」っていうイメージを強く持ちすぎているせいか、「精度」って意味のprecisionがなかなか思い出せない
prec...まで思い出せれば予測変換でどうにかできるんだけど
トイレにでも貼っとくかな
ITP1_10_B:三角関数
sin(),cos()関数の()の中に入るのがラジアンっていうの忘れてたから、テストしたらとんでもないことになって焦った
忘れないようにメモしておこう
角度からラジアンの変換
M_PI/180.0 * angle
ITP1_10_C:標準偏差
いい感じにfixedとsetprecision()の復習になった
while()文のもっといい書き方ないかなあ、自分の書き方にセンスをあんまり感じないんだよね
あと、久しぶりにaccumulate()使った
調べてみたら文字の連結にも使えるみたい
第4引数についていまいちわかってないけど、使えたら便利そうだからまた勉強しよう
accumulateメモ
accumulate(v.begin, v.end(), 初期値)
ITP_1_10_D:ミンコフスキー距離
ミンコフスキー距離って何?ってなったけど、わかりやすい問題文のおかげでそんなに躓くことなく進んだ
ただ、n乗根の計算の時にpow()でのn乗根で下のような計算の違いが出てちょっと引っかかった
pow(10,1.0/3.0)
→2.1544346900(正解)
pow(10,1/3)
→1.0000000000(不正解)
double N = 1.0/3.0
pow(10,N)
→inf(不正解)
2番目は1/3がint型で計算された結果、小数点以下が切り捨てられて0乗根になったんだろう
でも、1番目と3番目はどう違うんだろう?
解決したらまた追記したい