久々に深夜コーディング♪
しばらく触っていなかったプログラミングなのでなまりが心配されましたが、簡単なので無事二問通せました。
いえ〜い!
それでは
Easy
配列三つの数字を足して出来る数字ですべての桁が5と8であるような数字が幸福な数とするとき、その数のだし方が何パターンあるか?
class FortunateNumbers { public: string toStr(int n) { stringstream ss; ss << n; return ss.str(); } bool fort(string s) { for (int i = 0; i < s.length(); i++) { if (s[i] != '5' && s[i] != '8') return false; } return true; } int getFortunate( vector <int> a, vector <int> b, vector <int> c ) { vector<int> isnum; for (int i = 0; i < a.size(); i++) { for (int j = 0; j < b.size(); j++) { for (int k = 0; k < c.size(); k++) { int sum = a[i] + b[j] + c[k]; if (fort(toStr(sum))) { if (isnum.empty()) { isnum.push_back(sum); } else { bool flag = true; for (int p = 0; p < isnum.size(); p++) { if (isnum[p] == sum) { flag = false; break; } } if (flag) isnum.push_back(sum); } } } } } return isnum.size(); } };
Medium
総当たりでも出来るそうですがそんな考え方は思いつかずひたすら数学的解き方を調整していましたw
class RotatedClock { public: string toStr(int n) { stringstream ss; ss << n; return ss.str(); } string getEarliest( int hourHand, int minuteHand ) { string res = ""; // 短針の角度から分を計算する int hdeg = hourHand % 30; int min = hdeg * 2; // 正しい角度とのズレ int maydeg = min * 6; int dis = abs(minuteHand - maydeg); // 基準は必ず12時から30度の倍数の位置なのでそれ以外は不可能 if (dis % 30 != 0) return res; // 基準は0時から何時間ズレているか int cer = 0 - (minuteHand - maydeg) / 30; if (cer < 0) cer += 12; if (cer >= 12) cer -= 12; // 基準より時間を計算 cer += hourHand / 30; if (cer >= 12) cer -= 12; if (cer < 0) cer -=12; string hstr, mstr; hstr = toStr(cer); mstr = toStr(min); if (hstr.length() == 1) hstr = '0' + hstr; if (mstr.length() == 1) mstr = '0' + mstr; res += hstr + ':' + mstr; return res; } };
コメントは最後にまとめるためw
結果
Passed System Test(208.76) + Passed System Test(243.58) + Opened + 0.0 = 452.34(207位)
Rate 765 -> 852
緑がみえてきた!