最簡真分數(北大複試上機)
阿新 • • 發佈:2021-01-26
前言:
21考研,不論能否進複試記錄一下準備路上寫下的垃圾程式碼。本來啃《演算法筆記》,但是感覺太多了做不完,改做王道機試指南。
題目描述:
給出n個正整數,任取兩個數分別作為分子和分母組成最簡真分數,程式設計求共有幾個這樣的組合。
輸入描述
每組包含n(n<=600)和n個不同的整數,整數大於1且小於等於1000。
輸出描述:
每行輸出最簡真分數組合的個數。
解答
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool nofactor (int a, int b) { //最大公倍數為1則為最簡分數
int res = 0;
while (a != 0 && b != 0) {
if (a > b)
a = a % b;
else
b = b % a;
}
if (a == 0 && b != 0)
res = b;
else
res = a;
if (res != 1)
return false;
else
return true;
}
int main() {
int n;
while (cin >> n) {
int count = 0;
int temp;
vector<int> vi;
for (int i = 0; i < n; i++) {
cin >> temp;
vi.push_back(temp);
}
sort(vi.begin(),vi.end()); //排序以保證真分數這一條件
for (int i = vi.size() - 1; i >= 0; i--)
for (int j = i; j >= 0; j--)
if (nofactor(vi[i], vi[j]))
count++;
cout << count << endl;
}
return 0;
}