オンラインハッカソン「六村リオのコーヒー問題」
友達から聞かれて俺も訳わかめだったのでたまらず投稿。
漫画版: 女子高生プログラマーの大バトル!〜コボール文明の逆襲〜|paizaオンラインハッカソン6
このサイトの問題なのだが、どうにも自分で書いたコードが通らない。
事前チェックはOKなのだが、どこをどう直しても、最後のTestCode5で出力結果が違う、と吐かれる。
自分の回答は以下
#include <stdio.h> float Oyuadd(float yu, float ryou){ return yu + ryou; } float Funadd(float fun, float ryou){ return fun + ryou; } float Goukei(float fun, float yu){ return fun + yu; } float Ajimi(char flag, float fun, float yu, float ryou){ /** *flag = 0 -> yu *flag = 1 -> fun */ switch (flag){ case 0: return yu - (ryou * (yu / Goukei(fun,yu))); case 1: return fun - (ryou * (fun / Goukei(fun, yu))); default: return 0; } } float CalcNoudo(float fun, float yu){ return fun / Goukei(fun, yu); } int main(){ /* 入力が 4 1 50 3 20 2 13 3 20 */ //粉末と湯の量 /* double yu = 0.0000; double fun = 0.0000; double noudo = 0.0000; */ float yu = 0.0000; float fun = 0.0000; float noudo = 0.0000; float ryou = 0.0000; int nyu = 0; int count = 0; int sousa = 0; scanf("%d", &count); fflush(stdin); for (; count > 0; count--){ //操作と量を入力 scanf("%d %d", &sousa, &nyu); fflush(stdin); ryou = (float)nyu; switch (sousa){ case 1: yu = Oyuadd(yu, ryou); break; case 2: fun = Funadd(fun, ryou); break; case 3: yu = Ajimi(0, fun, yu, ryou); fun = Ajimi(1, fun, yu, ryou); break; default: break; } } noudo = CalcNoudo(fun,yu); nyu = (int)(noudo*100); printf("%d\n", nyu); }
眠い頭で書いていたので今見直すとものすごく突っ込みどころがあるのだが。。。
根本的に間違っていることはないと思われるのだがなぜなのだろう。。。
ちなみに、正解した方の例として調べたところ、こちらのサイトに解答例が載っていた。
PaizaオンラインハッカソンVol.6に参加してみた(六村リオミッション, C言語) | Project Flora
読んでも読んでも、やっていることは同じにしか見えないのですが。。。。
いや、float型の誤差を考慮に入れてはいるのですが、
それでは問題としてそもそも成り立たないような気もしていますし。。。。
謎です。わかる人いればぜひコメントで教えてください。。。
終わります。