#36899: 為甚麼是錯的!?


tommyyang1025@gmail.com (Tommy Yang)

學校 : 不指定學校
編號 : 168835
來源 : [60.248.154.141]
最後登入時間 :
2024-05-20 09:31:07
b537. 分數運算-1 -- 老師的教甄題 | From: [180.176.188.112] | 發表日期 : 2023-08-15 21:47

#include <bits/stdc++.h>
using namespace std;
#define int long long int
signed main(){
    int a,b;
    while(cin>>a>>b){
        vector<bool> steps;
        while(b!=1){
            if(a>b){
                a-=b;
                steps.push_back(true);
            }
            else{
                swap(a,b);
                steps.push_back(false);
            }
        }
        int ans = pow(2,a-1);
        for(int i = steps.size()-1 ; i>=0 ; i--){
            if(steps[i]){
                ans*=2;
            }
            else{
                ans+=1;
            }
        }
        cout<<ans<<endl;
    }
    
    return 0;
}

 
#41853: Re: 為甚麼是錯的!?


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [39.14.24.86]
最後登入時間 :
2024-09-14 00:24:32
b537. 分數運算-1 -- 老師的教甄題 | From: [39.14.8.57] | 發表日期 : 2024-09-02 03:10

#include
using namespace std;
#define int long long int
signed main(){
    int a,b;
    while(cin>>a>>b){
        vector steps;
        while(b!=1){
            if(a>b){
                a-=b;
                steps.push_back(true);
            }
            else{
                swap(a,b);
                steps.push_back(false);
            }
        }
        int ans = pow(2,a-1);
        for(int i = steps.size()-1 ; i>=0 ; i--){
            if(steps[i]){
                ans*=2;
            }
            else{
                ans+=1;
            }
        }
        cout<    }
    
    return 0;
}

我記得pow的回傳值是double型態

 
#41854: Re: 為甚麼是錯的!?


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [39.14.24.86]
最後登入時間 :
2024-09-14 00:24:32
b537. 分數運算-1 -- 老師的教甄題 | From: [39.14.8.57] | 發表日期 : 2024-09-02 03:12

#include
using namespace std;
#define int long long int
signed main(){
    int a,b;
    while(cin>>a>>b){
        vector steps;
        while(b!=1){
            if(a>b){
                a-=b;
                steps.push_back(true);
            }
            else{
                swap(a,b);
                steps.push_back(false);
            }
        }
        int ans = pow(2,a-1);
        for(int i = steps.size()-1 ; i>=0 ; i--){
            if(steps[i]){
                ans*=2;
            }
            else{
                ans+=1;
            }
        }
        cout<    }
    
    return 0;
}

我記得pow的回傳值是double型態

以及ans會大到需要用long long

 
#41855: Re: 為甚麼是錯的!?


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [39.14.24.86]
最後登入時間 :
2024-09-14 00:24:32
b537. 分數運算-1 -- 老師的教甄題 | From: [39.14.8.57] | 發表日期 : 2024-09-02 03:18

sorry是我沒看到你有先define,我用你的程式測試後MLE

 

 
#41856: Re: 為甚麼是錯的!?


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [39.14.24.86]
最後登入時間 :
2024-09-14 00:24:32
b537. 分數運算-1 -- 老師的教甄題 | From: [39.14.8.57] | 發表日期 : 2024-09-02 03:55

#include
using namespace std;
#define int long long int
signed main(){
    int a,b;
    while(cin>>a>>b){
        vector steps;
        while(b!=1){
            if(a>b){
                a-=b;
                steps.push_back(true);
            }
            else{
                swap(a,b);
                steps.push_back(false);
            }
        }
        int ans = pow(2,a-1);
        for(int i = steps.size()-1 ; i>=0 ; i--){
            if(steps[i]){
                ans*=2;
            }
            else{
                ans+=1;
            }
        }
        cout<    }
    
    return 0;
}

大大,我在參考你的程式碼後,加上a,b約分的環節,就AC (3ms, 332KB)了,在此感謝您

以下我的程式碼:

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
    int a,b;
    while(cin>>a>>b){
        int A=max(a,b);
        int B=min(a,b);

        while(A%B!=0){
            A%=B;
            swap(A,B);
        }
        if(B!=1){
            a/=B;
            b/=B;
        }
        vector<bool> steps;
        while(b!=1){
            if(a>b){
                a-=b;
                steps.push_back(true);
            }
            else{
                swap(a,b);
                steps.push_back(false);
            }
        }
        unsigned long long ans = pow(2,a-1);
        for(int i = steps.size()-1 ; i>=0 ; i--){
            if(steps[i]){
                ans*=2;
            }
            else{
                ans+=1;
            }
        }
        steps.clear();
        cout<<ans<<endl;
    }

    return 0;
}

 
#41857: Re: 為甚麼是錯的!?


kk20180820@gmail.com (Wayne Yang)

學校 : 國立鳳山高級中學
編號 : 172018
來源 : [39.14.24.86]
最後登入時間 :
2024-09-14 00:24:32
b537. 分數運算-1 -- 老師的教甄題 | From: [39.14.8.57] | 發表日期 : 2024-09-02 03:58

不約分的話,帶入a=9,b=3就會卡在if(a>b)那邊不停swap

 
ZeroJudge Forum