#14153: 請問為什麼這樣第一個測資會輸出0


a9677560 (BANG)

學校 : 高雄市立高雄高級中學
編號 : 69016
來源 : [114.40.151.71]
最後登入時間 :
2018-06-30 22:20:35
b112. 5. 高中運動會 -- 93學年度全國資訊學科能力競賽 | From: [114.40.175.1] | 發表日期 : 2018-06-17 13:15

#include using namespace std; int gcd(int x, int y); int main(){ int n,student; while(cin >> n){ int ans[n],answer=0; int people[n]; for(int i=0;i<n;i++){ //把人數輸入陣列 cin >> student; people[i] = student; } for(int i=0;i<n;i++){ if (i != n-1){ int r = gcd(people[i], people[i+1]); ans[i] = r; } for(int i=0;i<n;i++){ //檢驗是否為最大公因數 if (i != n-1){ answer = ans[0]; while(ans[i+1] < answer){ answer = ans[i+1]; } } } } cout << answer << endl; } } int gcd(int x,int y){ if (y == 0){ return x; } else { return gcd(y , x % y); //即使後大於前仍會調換 } }

 
#14154: Re:請問為什麼這樣第一個測資會輸出0


a9677560 (BANG)

學校 : 高雄市立高雄高級中學
編號 : 69016
來源 : [114.40.151.71]
最後登入時間 :
2018-06-30 22:20:35
b112. 5. 高中運動會 -- 93學年度全國資訊學科能力競賽 | From: [114.40.175.1] | 發表日期 : 2018-06-17 13:16

#include<iostream>

using namespace std;

int gcd(int x, int y);

 

int main(){

    int n,student;

    while(cin >> n){

        int ans[n],answer=0;

        int people[n];

        for(int i=0;i<n;i++){   //把人數輸入陣列

            cin >> student;

            people[i] = student;

        }

        for(int i=0;i<n;i++){

            if (i != n-1){

                int r = gcd(people[i], people[i+1]);

                ans[i] = r;

            }

        for(int i=0;i<n;i++){   //檢驗是否為最大公因數

            if (i != n-1){

                answer = ans[0];

                while(ans[i+1] < answer){

                    answer = ans[i+1];

                }

            }

        }

        }

        cout << answer << endl;

    }

}

 

int gcd(int x,int y){

    if (y == 0){

        return x;

    } else {

        return gcd(y , x % y);  //即使後大於前仍會調換

    }

}

 

 

 
#14155: Re:請問為什麼這樣第一個測資會輸出0


a0970580085@gmail.com (/)

學校 : 義守大學
編號 : 74647
來源 : [125.229.235.114]
最後登入時間 :
2023-08-30 17:36:04
b112. 5. 高中運動會 -- 93學年度全國資訊學科能力競賽 | From: [111.254.217.157] | 發表日期 : 2018-06-17 15:36

#include

using namespace std;

int gcd(int x, int y);

 

int main(){

    int n,student;

    while(cin >> n){

        int ans[n],answer=0;

        int people[n];

        for(int i=0;i<n;i++){   //把人數輸入陣列

            cin >> student;

            people[i] = student;

        }

        for(int i=0;i<n;i++){

            if (i != n-1){

                int r = gcd(people[i], people[i+1]);

                ans[i] = r;

            }

        for(int i=0;i<n;i++){   //檢驗是否為最大公因數

            if (i != n-1){

                answer = ans[0];

                while(ans[i+1] < answer){

                    answer = ans[i+1];

                }

            }

        }

        }

        cout << answer << endl;

    }

}

 

int gcd(int x,int y){

    if (y == 0){

        return x;

    } else {

        return gcd(y , x % y);  //即使後大於前仍會調換

    }

}

 

 

 for(int i=0;i<n;i++){   //檢驗是否為最大公因數

            if (i != n-1){

                answer = ans[0];

                while(ans[i+1] < answer){

                    answer = ans[i+1];

                }

            }

        }

n 等於 4 的時候 i 會跑0 1 2

你的 ans[i+1] 會跑到 ans[3]

你的ans[3]是 0

 

你的檢驗方法應該也有錯

3

494

1482

741

用你方法答案出來會是494

不過正確答案是247

 
ZeroJudge Forum