Code chuyển đổi giây sang giờ phút giây C++ bị sai kết quả

Mọi người ơi em đang luyện viết code trên web thì gặp một đề như sau:
Viết chương trình nhập vào một số nguyên không âm n (0≤n<86400). Đó là giây hiện tại của một ngày. Hãy chuyển đổi giây đó sang dạng giờ, phút, giây.
Thì em có viết đoạn code như này:

#include<iostream>
using namespace std;

int main ()
{
    int n;
    int m;
    int s;
    int h;
    cin>>n;
    h = n / 3600;
    if(n%3600==0)
       {
           if(h<10)
            cout<<0<<h<<":00:00";
           else
            if(h>=10)
            cout<<h<<":00:00";
       }
    else
        if(n%3600!=0)
       {
        m = (n - (3600*h))/60;
        if(h<10)
           {   s = n - (3600*h);
               if(s<60)
               {
                if(s>=10)
                    cout<<0<<h<<":"<<"00"<<":"<<s;
                else
                    cout<<0<<h<<":"<<"00"<<":"<<0<<s;
               }
               else
                if(s>=60)
               {

                   s = s - (m*60);
                   if(s<10)
                   {
                        if(m<10)
                            cout<<0<<h<<":"<<0<<m<<":"<<0<<s;
                        else
                            if(m>=10)
                                cout<<0<<h<<":"<<m<<":"<<0<<s;
                   }
                   else
                    if(s>=10)
                    {
                    if(m<10)
                        cout<<0<<h<<":"<<0<<m<<":"<<s;
                    else
                        cout<<0<<h<<":"<<m<<":"<<s;
                    }
               }
           }
           else
          {
              if(h>=10)
           {
               s = n - (3600*h);
               if(s<60)
               {
                if(s>=10)
                    cout<<h<<":"<<"00"<<":"<<s;
                else
                    cout<<h<<":"<<"00"<<":"<<0<<s;
               }
               else
                if(s>=60)
               {
                   s = s - (m*60);
                   if(s<10)
                   cout<<h<<":"<<0<<m<<":"<<0<<s;
                   else
                    if(s>=10)
                    {
                    if(m<10)
                        cout<<h<<":"<<0<<m<<":"<<s;
                    else
                        cout<<h<<":"<<m<<":"<<s;
                    }
               }
           }
           }
       }
    return 0;
}

Nhưng mà khi nộp lên thì đúng hết mọi testcase nhưng lại chỉ sai một trường hợp duy nhất xin ác cao nhân có thể gợi ý giúp em hay chỉ ra lỗ hỏng trong code của em được không ạ? Em cảm ơn mọi người nhiều trước ^^

Nhìn mã của bạn mà kinh khủng quá bạn ạ. Quá nhiều if - elsecout, xét quá nhiều trường hợp, nhưng toàn dư thừa.
Kiểu như:

int a;
cin >> a;
if(a < 0){
    cout << "-" << -a;
}else{
    if(a == 0){
        cout << "0";
    }else if(a < 10){
        if(a == 1){
            cout << "1";
        } else if(a == 2){
            cout << "2";
        }...
    }else{
        cout << a;
    }
}

Nhưng đơn giản chỉ là:

int a;
cin >> a;
cout << a;

Có thể chính những if - else dư thừa đã vô tình làm sai 1 trường hợp nào đó.

4 Likes

À vâng cảm ơn bác góp ý nhiều ạ trình em còn kém nên em viết có hơi dài nên là khi nãy em thử viết lại code theo kiểu khác thì có vẻ đã ổn áp rồi ạ ^^

#include<iostream>
using namespace std;

int main ()
{
    int n;
    int m;
    int s;
    int h;
    cin>>n;
    h=n/3600;   
    n=n%3600;
    m=n/60  ;   
    n=n%60;
    s=n;
    if (h<10) cout<<0<<h<<":";
        else cout<<h<<":";
    if (m<10) cout<<0<<m<<":";
        else cout<<m<<":";
    if (s<10) cout<<0<<s;
        else cout<<s;
    return 0;
}

Còn đây là code cũ sau khi em tối ưu hóa ạ :"> Tính ra không cần viết dài thế nhưng máy vẫn hiểu ^^ Thật lòng cảm ơn bác nhiều ạ ^^

#include<iostream>
using namespace std;

int main ()
{
    int n;
    int m;
    int s;
    int h;
    cin>>n;
    h = n / 3600;
    m = (n - (3600*h))/60;
    s = n - (3600*h);
    s = s - (m*60);
    if(h<10)
        cout<<0<<h<<":";
    else
        cout<<h<<":";
    if(m<10)
        cout<<0<<m<<":";
    else
        cout<<m<<":";
    if(s<10)
        cout<<0<<s;
    else
        cout<<s;
    return 0;
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?