53178


テストケースが通りません。  
入力結果を何個か確認したところあってそうなのですがどこがテストケースにひかかっているか不明です。  
解説いただければ幸いです。

▼問題文  
正整数  
A,Bが与えられます。

Aも Bも割り切る正整数のうち、N番目に大きいものを求めてください。

なお、与えられる入力では、  
Aも Bも割り切る正整数のうち N番目に大きいものが存在することが保証されます。

制約  
入力は全て整数である。  
1≤A,B≤100  
Aも Bも割り切る正整数のうち、K番目に大きいものが存在する。  
N≥1

▼コード

[code]

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String args[]) {
            Scanner scn = new Scanner(System.in);
            int a = scn.nextInt();
            int b = scn.nextInt();
            int n = scn.nextInt();
    
            ArrayList<Integer> list = new ArrayList<>();
    
            int i = 1;
            do {
                if (a % i == 0 && b % i == 0) {
                    list.add(i);
                }
                i++;
            } while (i < a);
    
            System.out.println(list.get((list.size()-n)));
        }
    }
    
[/code]

\--  
引用  
ABC 120 B - K-th Common Divisor  
<https://atcoder.jp/contests/abc120/tasks/abc120_b>


CC BY-SA 4.0
2019-03-03T18:29:31.040
53176
2019-03-04T14:44:55.957
2019-03-04T14:44:55.957
32396
32396
question
java アルゴリズム
テストケースに通らない理由がわかりません。


ざっと見て、一番怪しそうなのは

[code]

        } while (i < a);
    
[/code]

のところです。例えば`a=6, b=12`のとき、6も両方の数を割り切る正整数ですが、この条件式だと除外されてしまいます。

`i <= a`としてみたらどうでしょうか。

* * *

ちなみに`do while`ではなく`for`を使った方が分かりやすいと思います。


CC BY-SA 4.0
2019-03-03T23:49:16.780
53178
2019-03-03T23:49:16.780
3605
53176
answer