ichirin2501's diary

いっちりーん。

Sum and Average

他ブログ様にコメントして、その内容が間違ってることに気付いて鬱のichirinです。
コメント修正出来るならしたい、とってもしたい。
ソースコード送信の件も含めてやっちまった感がすごく漂っています。

Sum and Average

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0045
今回はこの問題をショートコーディングしてみます。
その前に、AOJでは送信すると2byte増えます。
しかし、こちらで仰られてる通り、このツールを使えばbyte数を減らせるようです。
このbyte数に関して整理してみます。


手元のソースコード(最後の文字位置):n byte
AOJで普通にSubmit:n+2
AOJツールでSubmit:n+1


現在のAOJではこのような仕様になっているようです。
手元のソースコードを基準で見ると、最大で2byte増えて、AOJ基準だと(ry
という勘違いをしてコメントしちまったああああああああああああうわあああああああ。
ここで謝罪、ごめんなさい。




問題に戻ります。


問題文
販売単価と販売数量を読み込んで、販売金額の総合計と販売数量の平均を出力。
概略
読んで合計と平均を出力。

で、Cで最初に書いたコードがこれ。

s,a,i,y;
main(x)
{
  for(;~scanf("%d,%d",&x,&y);i++)
    s+=x*y,a+=y;
  printf("%d\n%.f\n",s,1.*a/i);
  exit(0);
}

通りません。 orz
小数点以下を非表示にしたら四捨五入してくれるから合ってると思ったんだけどな…。
原因が解らないので、強引に四捨五入→int型に戻すという処理に変えたら通った。

s,a,i,y;
main(x)
{
  for(;~scanf("%d,%d",&x,&y);i++)
    s+=x*y,a+=y;
  printf("%d\n%d\n",s,x=1.*a/i+.5);
  exit(0);
}



printf関数の戻り値は出力したバイト数だから、論理否定を利用して

//手元で 100byte
s,a,i,y;
main(x)
{
  for(;~scanf("%d,%d",&x,&y);i++)
    s+=x*y,a+=y;
  exit(!printf("%d\n%d\n",s,x=1.*a/i+.5));
}



ここから、もう1byte縮めてAOJ表記で100byteでSubmitしたのですが…よくない手法です。
・ %.f出力がどうしてだめなのか
・ exitの謎
どちらかが分かれば100byte(AOJ表記で)は切れるのになぁ。