//自己练习 AC 王道机试-数学问题 习题P92

//自己练习 AC 王道机试-数学问题 习题P92
//给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
//https://www.nowcoder.com/practice/1f1db273eeb745c6ac83e91ff14d2ec9?tpId=61&tqId=29507&tPage=1&ru=%2Fkaoyan%2Fretest%2F1002&qru=%2Fta%2Fpku-kaoyan%2Fquestion-ranking
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
struct Fraction{
    int up,down;
    Fraction(int a,int b):up(a),down(b){}
};
int getGcd(int a,int b){
    if(b ==0) return a;
    else return getGcd(b,a%b);
}
bool reduction(Fraction result){
    if(result.up >= result.down) return false;
    long long gcd = getGcd(abs(result.up),abs(result.down));
    return gcd == 1 ? true : false;

}
int getNumber(int arr[],int n){
    sort(arr,arr+n);
    int count = 0;
    for(int i=0;i < n;++i){ //#include <string>
        for(int j = i;j<n;++j){
            if(reduction(Fraction(arr[i],arr[j]))) {
//                printf("%d-%d\n",arr[i],arr[j]);
                count++;
            }
        }
    }
    return count;
}
const int MAXN = 600+10;

int main(){
    int n;
    int arr[MAXN];

    while(cin>>n){
        if(n==0) break;
        for(int i=0;i<n;++i){
            cin>>arr[i];
        }
        cout<<getNumber(arr,n)<<endl;
    }

    return 0;
}


全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务