#54153: C 語言 可參考解 沒使用 fgets 的簡易解


11115121@gs.ltivs.ilc.edu.tw (資訊甲_21)


#include<stdio.h>

// 最大公因數
int gcd( int a , int b )
{
    if ( b == 0 )
        return a;

    if ( a < b )
        return gcd( b , a );

    return gcd( b , a % b );
}

int main()
{
    int n;
    scanf( "%d" , &n );
    getchar();
    for ( int i = 0 ; i < n ; i++ )
    {
        int array[1000] = {0} , count = 0 , temp = 0 , max_gcd = 0;
        char c;
        while ( ( c = getchar() ) != EOF )
        {
            // 判斷數字是否結束 並儲存這個數
            if ( c == ' ' || c == '\n' )
            {
                array[count++] = temp;
                temp = 0;
            }
            // 把 temp * 10 後加上新讀取的下一個位數
            else
                temp = temp * 10 + ( c - '0' );

            // 換行
            if ( c == '\n' )
                break;
        }

        // 用類似泡沫的方式 計算每組數字的公因數(會有需多重複 但效率已經夠了)
        for ( int j = 0 ; j < count - 1 ; j++ )
            for ( int k = j + 1 ; k < count ; k++ )
                if ( gcd( array[j] , array[k] ) > max_gcd && array[j] != 0 && array[k] != 0 )
                    max_gcd = gcd( array[j] , array[k] );

        printf( "%d\n" , max_gcd );
    }
    return 0;
}