题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述
输入有多组,每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
当n=0时,程序结束,不需要处理这组数据。
输出描述
每行输出最简真分数组合的个数。
样例输入
7
3 5 7 9 11 13 15
3
2 4 5
0
样例输出
17
2
#include
#include
#include
using namespace std; const int maxn = 1000; int num[maxn] = {
0}; // 用于判断 r1 / r2 是否是最简真分数,如果是则他们的最大公约数为 1 ,且分子小于分母 int solve(int r1, int r2) { int tmp; while(r1 != 0) { tmp = r1; r1 = r2 % r1; r2 = tmp; } if(r2 == 1) { return 1; } else { return 0; } } int main() { int n; while(cin >> n) { if(n == 0) { break; } for(int i = 0; i < n; ++i) { cin >> num[i]; } // 真分数一定是 分子小于分母 则先从小到大排序 sort(num, num+n); int count = 0; // 计数器 for(int i = 0; i < n-1; ++i) { for(int j = i+1; j < n; ++j) { if(solve(num[i],num[j]) == 1) { ++count; } } } cout << count << endl; } return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225545.html原文链接:https://javaforall.net
