AtCoderのabc001_3の問題を問いています。
以下のプログラムを提出すると、テストケースを通過できません。
入力例のものは以下の回答で通過できました。
テストケースの内容がわからないので、どこをどう修正していいのかわかりません。
お教えいただけると助かります。
問題文の貼り付けがうまくできないので、お手数ですが以下のリンクからご確認ください。
https://atcoder.jp/contests/abc001/tasks/abc001_3
該当のソースコード
C++
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 float round_n(float number, double n) { 5 number = number * pow(10, n - 1); //四捨五入したい値を10の(n-1)乗倍する。 6 number = round(number); //小数点以下を四捨五入する。 7 number /= pow(10, n - 1); // 10の(n-1)乗で割る。 8 return number; 9 } 10 11 int main() { 12 float deg, dis; 13 cin >> deg >> dis; 14 deg /= 10; 15 string wind_direction; 16 if(deg >= 11.25 && deg < 33.75) { 17 wind_direction = "NNE"; 18 } else if(deg >= 33.75 && deg < 56.25) { 19 wind_direction = "NE"; 20 } else if(deg >= 56.25 && deg < 78.75) { 21 wind_direction = "ENE"; 22 } else if(deg >= 78.75 && deg < 101.25) { 23 wind_direction = "E"; 24 } else if(deg >= 101.25 && deg < 123.75) { 25 wind_direction = "ESE"; 26 } else if(deg >= 123.75 && deg < 146.25) { 27 wind_direction = "SE"; 28 } else if(deg >= 146.25 && deg < 168.75) { 29 wind_direction = "SSE"; 30 } else if(deg >= 168.75 && deg < 191.25) { 31 wind_direction = "S"; 32 } else if(deg >= 191.25 && deg < 213.75) { 33 wind_direction = "SSW"; 34 } else if(deg >= 213.75 && deg < 236.25) { 35 wind_direction = "SW"; 36 } else if(deg >= 236.25 && deg < 258.75) { 37 wind_direction = "WSW"; 38 } else if(deg >= 258.75 && deg < 281.25) { 39 wind_direction = "W"; 40 } else if(deg >= 281.25 && deg < 303.75) { 41 wind_direction = "WNW"; 42 } else if(deg >= 303.75 && deg < 326.25) { 43 wind_direction = "NW"; 44 } else if(deg >= 326.25 && deg < 348.75) { 45 wind_direction = "NNW"; 46 } else { 47 wind_direction = "N"; 48 } 49 50 float wind_speed = dis / 60; 51 // wind_speed = round(wind_speed * 100) / 100; 52 wind_speed = round_n(wind_speed, 2); 53 54 int W; 55 if(wind_speed >= 0.0 && wind_speed <= 0.2) { 56 W = 0; 57 wind_direction = "C"; 58 } else if(wind_speed >= 0.3 && wind_speed <= 1.5) { 59 W = 1; 60 } else if(wind_speed >= 1.6 && wind_speed <= 3.3) { 61 W = 2; 62 } else if(wind_speed >= 3.4 && wind_speed <= 5.4) { 63 W = 3; 64 } else if(wind_speed >= 5.5 && wind_speed <= 7.9) { 65 W = 4; 66 } else if(wind_speed >= 8.0 && wind_speed <= 10.7) { 67 W = 5; 68 } else if(wind_speed >= 10.8 && wind_speed <= 13.8) { 69 W = 6; 70 } else if(wind_speed >= 13.9 && wind_speed <= 17.1) { 71 W = 7; 72 } else if(wind_speed >= 17.2 && wind_speed <= 20.7) { 73 W = 8; 74 } else if(wind_speed >= 20.8 && wind_speed <= 24.4) { 75 W = 9; 76 } else if(wind_speed >= 24.5 && wind_speed <= 28.4) { 77 W = 10; 78 } else if(wind_speed >= 28.5 && wind_speed <= 32.6) { 79 W = 11; 80 } else if(wind_speed >= 32.7) { 81 W = 12; 82 } 83 cout << wind_direction << ' ' << W << endl; 84 return 0; 85 }
kazuma-sさんのアドバイスにより書き直したソースコード
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 vector<int> deg_table = {1125, 3375, 5625, 7875, 10125, 12375, 6 14625, 16875, 19125, 21375, 23625, 25875, 7 28125, 30375, 32625, 34875}; 8 9 vector<string> dir_name = {"N", "NNE", "NE", "ENE", "E", "ESE", 10 "SE", "SSE", "S", "SSW", "SW", "WSW", 11 "W", "WNW", "NW", "NNW", "C"}; 12 13 vector<int> dis_table = {int(0.25 * 60), int(1.55 * 60), int(3.35 * 60), 14 int(5.45 * 60), int(7.95 * 60), int(10.75 * 60), 15 int(13.85 * 60), int(17.15 * 60), int(20.75 * 60), 16 int(24.45 * 60), int(28.45 * 60), int(32.65 * 60), 17 int(32.75 * 60)}; 18 19 int deg, dis; 20 cin >> deg >> dis; 21 deg *= 10; 22 23 int i = 0; 24 while(i < 16 && deg >= deg_table.at(i)) { 25 i++; 26 } 27 int j = 0; 28 while(j < 12 && dis >= dis_table.at(j)) { 29 j++; 30 } 31 if(j == 0) { 32 i = 17; 33 } 34 cout << dir_name.at(i) << ' ' << j << endl; 35 36 return 0; 37}
回答2件
あなたの回答
tips
プレビュー