-5

TopCoder でコードを送信したところ、200 ポイントの SRM で 60 ポイントしか与えられませんでした。
アルゴリズムに問題があると思います。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

class Time
{
    public:
    string whatTime(int seconds)
    {
        int hours=0, minutes=0, secs=0;
        ostringstream cHours, cMinutes, cSeconds;
        string sHours, sMinutes, sSeconds;
        string theReturns;

        while (seconds > 0)
        {
            if (seconds > 3600)
            {
                hours++;
                seconds -= 3600;
            }
            else if (seconds > 60)
            {
                minutes++;
                seconds -= 60;
            } else {
                secs ++;
                seconds--;
            }
        }

        cHours << hours;
        cMinutes << minutes;
        cSeconds << secs;

        sHours = cHours.str() + ":";
        sMinutes = cMinutes.str() + ":";
        sSeconds = cSeconds.str();

        theReturns = sHours + sMinutes + sSeconds;

        return (theReturns);
    }
};  

/* Main Function for Me, I didn't submitted it on TopCoder, they only want the class */ 
int main()
{
    Time myTime;
    cout << myTime.whatTime(3661);
    return (0);
}
4

1 に答える 1

1

の数を 1 に減らすことができますostringstream。1 つのストリームでストリーム挿入演算子を使用します。

また、「if」ステートメントの代わりに数学ステートメントを使用します。

hours = seconds / 3600;
seconds_remaining = seconds % 3600;

数学ステートメントにより、ループの必要がなくなります。

于 2013-09-03T21:37:32.193 に答える