昨日に引き続いてJavaと英語の練習。今日の問題設定はこんな感じ。
ある人iがspeed[i]の速さで泳ぐ。distances[i]は泳ぐ距離を表し、currentは川の流れの速さを表す。このとき、泳ぐ人はdistances[i]の距離だけ川を上下する。このとき、ある人iは泳ぎきるのにどれほど時間がかかるか整数値(切り捨て)で求めよ。ただし、川の流れの方がある人iの泳ぐ速さ以上に速い場合は川を上れないので、かかる時間は-1とする。また、泳ぐ距離が0の場合は泳ぐのにかかる時間は0になる。上下の折り返しに時間はかからないものとする。
私が作成した回答は以下の通り。
public class Swimmers{ public static int[] getSwimTimes(int[] distances,int[] speeds, int current){ int i; int[] result = new int[distances.length]; for( i=0 ; i<distances.length ; i++ ){ if( distances[i] == 0 ){ result[i] = 0; }else if( speeds[i]<=current ){ result[i] = -1; }else{ result[i] = (int)((double)distances[i]/(current+speeds[i]) + (double)distances[i]/(speeds[i]-current)); } } return result; } }
結果は226.14/250。キャストと、ifとif elseの内容を逆に書いていたことでコンパイルエラーが発生したが、そのほか特に問題なく実装を行うことができた。Eclipseのプラグイン入れて練習した方がスピードが上がるのかちょっと検討中。デフォルトの環境ではちょっと厳しいかもしれない。
0 件のコメント:
コメントを投稿