aoj-0004 Simultaneous Equation
はい、どうもyudegakiです。
atcoderのc問を埋めるとか言っていたのにすぐに違うサイトに浮気してしまいました。
だって難しいんだもん。解説が(ry
まあ自分の実力不足であるのは確かなので力をつけていくことにします(まあ今回の問題も重要な部分は先輩にアドバイスをもらいましたが)
ということで本題に入りましょう。
今回の問題はこちらSimultaneous Equation | Aizu Online Judge
なんか数字を与えるからxとyを出せ。ってことですね。
まあここまではただの数学だから簡単なんだけど、問題はここ→”xとyを小数点第4位を四捨五入して、小数点第3位までで出力せよ”... は?こんなの簡単じゃんという方はお帰りください。私はこの処理をするコードが思いつかなかったのだ...(敗北)
簡潔に結論から言うと、int(1000 * x + 2 * (1000 * x - int(1000 * x))) / 1000.0 です。
まあ、何をやっているかというと2*(1000*x-int(1000*x))で四捨五入で繰り上げする箇所の処理。*1そこに1000倍したxを足してint型でキャストする。これで小数点第3桁までの数字を小数点より上(?)に配置して、int型キャストで下3桁以下の数字を処す。最後に1000で割って、あら不思議、四捨五入の完成よ☆
というわけで解説は以上。 四捨五入の書き方を学べてよかったです。ではまた逢う日まで。(最後にソースコードを貼っておわりにします)
#include<iostream>
#include<stdio.h>
using namespace std;
int main() {
double a, b, c, d, e, f, x, y;
while (cin >> a >> b >> c >> d >> e >> f) {
x = (b*f - e * c) / (b*d - a * e);
y = (a*f - d * c) / (a*e - b * d);
x = int(1000 * x + 2 * (1000 * x - int(1000 * x))) / 1000.0;
y = int(1000 * y + 2 * (1000 * y - int(1000 * y))) / 1000.0;
printf("%.3lf %.3lf\n", x, y);
}
}
*追記 普通に%.3lfで四捨五入した形になるみたいですね。四捨五入でクソ悩んでた意味...()
*1:ここでは小数点第4位が5以上だったら繰り上がること用いて、2をかけている
abc55-c
どうもyudegakiです。
atcoder beginner contest 055-cの解説をしていきます。
問題は→C - Scc Puzzle
n個のS字のブロックとm個のc字のブロックを使って"Scc"を作れという問題ですね。
ただし、c字のブロックを2つ組み合わせることでS字ブロックを1つ作れるという点に注意。
続きを読むはじめに
このブログではyudegakiの解いた競プロ問題の解説を載せていきます。
まあ、自分の振り返りのためのものなので解説が適当になってしまうかもしれませんがそこのところは…まぁ、多少はね?
ということで、よろしくお願いします。